CHANGES.html
author Tom Henderson <tomh@tomh.org>
Mon, 19 Mar 2018 10:40:32 -0700
changeset 13418 82d130348a36
parent 13408 07055158a65d
child 13436 f4a54635bc75
permissions -rw-r--r--
Update AUTHORS, CHANGES.html, RELEASE_NOTES for ns-3.28
     1 <!doctype html public "-//w3c//dtd html 4.0 transitional//en">
     2 <html>
     3 <head>
     4    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     5    <title>ns-3 Change Log</title>
     6 </head>
     7 <body>
     8 
     9 <h1>
    10 ns-3: API and model change history</h1>
    11 <!--
    12 This ChangeLog is updated in the reverse order 
    13 with the most recent changes coming first.  Date format:  DD-MM-YYYY
    14 -->
    15 <p>
    16 ns-3 is an evolving system and there will be API or behavioral changes
    17 from time to time.   Users who try to use scripts or models across
    18 versions of ns-3 may encounter problems at compile time, run time, or
    19 may see the simulation output change.  </p>
    20 <p>
    21 We have adopted the development policy that we are going to try to ease
    22 the impact of these changes on users by documenting these changes in a
    23 single place (this file), and not by providing a temporary or permanent
    24 backward-compatibility software layer.  </p>
    25 <p>
    26 A related file is the RELEASE_NOTES file in the top level directory.
    27 This file complements RELEASE_NOTES by focusing on API and behavioral
    28 changes that users upgrading from one release to the next may encounter.
    29 RELEASE_NOTES attempts to comprehensively list all of the changes
    30 that were made.  There is generally some overlap in the information 
    31 contained in RELEASE_NOTES and this file.  </p>
    32 <p>
    33 The goal is that users who encounter a problem when trying to use older
    34 code with newer code should be able to consult this file to find
    35 guidance as to how to fix the problem.  For instance, if a method name
    36 or signature has changed, it should be stated what the new replacement
    37 name is. </p>
    38 <p>
    39 Note that users who upgrade the simulator across versions, or who work
    40 directly out of the development tree, may find that simulation output
    41 changes even when the compilation doesn't break, such as when a
    42 simulator default value is changed.  Therefore, it is good practice for
    43 _anyone_ using code across multiple ns-3 releases to consult this file,
    44 as well as the RELEASE_NOTES, to understand what has changed over time.
    45 </p>
    46 <p>
    47 This file is a best-effort approach to solving this issue; we will do
    48 our best but can guarantee that there will be things that fall through
    49 the cracks, unfortunately.  If you, as a user, can suggest improvements
    50 to this file based on your experience, please contribute a patch or drop
    51 us a note on ns-developers mailing list.</p>
    52 
    53 <hr>
    54 <h1>Changes from ns-3.27 to ns-3.28</h1>
    55 <h2>New API:</h2>
    56 <ul>
    57   <li> When deserializing Packet contents, <b>Header::Deserialize (Buffer::Iterator start)</b> and <b>Trailer::Deserialize (Buffer::Iterator start)</b> can not successfully deserialize variable-length headers and trailers.  New variants of these methods that also include an 'end' parameter are now provided.</li>
    58   <li> Ipv[4,6]AddressGenerator can now check if an address is allocated (<b>Ipv[4,6]AddressGenerator::IsAddressAllocated</b>) or a network has some allocated address (<b>Ipv[4,6]AddressGenerator::IsNetworkAllocated</b>).</li>
    59   <li> LTE UEs can now use IPv6 to send and receive traffic.</li>
    60   <li> UAN module now supports an IP stack.</li>
    61   <li> Class <b>TcpSocketBase</b> trace source <i>CongestionWindowInflated</i> shows the values with the in-recovery inflation and the post-recovery deflation.
    62   <li> Added a FIFO queue disc (FifoQueueDisc) and the Token Bucket Filter (TbfQueueDisc).</li>
    63 </ul>
    64 <h2>Changes to existing API:</h2>
    65 <ul>
    66   <li> Class <b>LrWpanMac</b> now supports extended addressing mode. Both <b>McpsDataRequest</b> and <b>PdDataIndication</b> methods will now use extended addressing if <b>McpsDataRequestParams::m_srcAddrMode</b> or <b>McpsDataRequestParams::m_dstAddrMode</b> are set to <b>EXT_ADDR</b>.</li>
    67   <li> Class <b>LteUeNetDevice</b> MAC address is now a 64-bit address and can be set during construction.</li>
    68   <li> Class <b>TcpSocketBase</b> trace source <i>CongestionWindow</i> shows the values without the in-recovery inflation and the post-recovery deflation; the old behavior has been moved to the new trace source <i>CongestionWindowInflated</i>.
    69 </ul>
    70 <h2>Changes to build system:</h2>
    71 <ul>
    72   <li> The C++ standard used during compilation (default std=c++11) can be now be changed via the CXXFLAGS variable.</li>
    73 </ul>
    74 <h2>Changed behavior:</h2>
    75 <ul>
    76   <li>The Mode, MaxPackets and MaxBytes attributes of the Queue class have been deprecated in favor of the MaxSize attribute. Old attributes can still be used, but using them will be no longer possible in one of the next releases. The methods to get/set the old attributes will be removed as well.</li>
    77   <li>The attributes of the QueueDisc subclasses that separately determine the mode and the limit of the QueueDisc have been deprecated in favor of the single MaxSize attribute.</li>
    78   <li>The GetQueueSize method of some QueueDisc subclasses (e.g., RED) has been removed and replaced by the GetCurrentSize method of the QueueDisc base class.</li>
    79   <li>All Wi-Fi management frames are now transmitted using the lowest basic rate.</li>
    80   <li>The Wi-Fi spectrum model now takes into account adjacent channels through OFDM transmit spectrum masks.</li>
    81   <li> The CsmaNetDevice::PhyTxBeginTrace will trace all attempts to transmit, even those that result in drops. Previously, eventual channel drops were excluded from this trace.</l>
    82   <li>The TCP congestion window trace now does not report on window inflation during fast recovery phase because it is no longer internally maintained as an inflated value (a separate trace called CongestionWindowInflated can be used to recover the old trace behavior).</li>
    83 </ul>
    84 
    85 <hr>
    86 <h1>Changes from ns-3.26 to ns-3.27</h1>
    87 <h2>New API:</h2>
    88 <ul>
    89 <li>Added <code>Vector{2,3}D.GetLength ()</code>.</li>
    90 <li>Overloaded <code>operator+</code> and <code>operator-</code> for <code>Vector{2,3}D</code>.</li>
    91 <li>Added iterator version of WifiHelper::Install() to install Wi-Fi devices on range of nodes.</li>
    92 <li>Added a new attribute in TcpSocketBase to track the advertised window.</li>
    93 <li>Included the model of <b>TCP Ledbat</b>.</li>
    94 <li>Included the TCP SACK-based loss recovery algorithm outlined in RFC 6675.</li>
    95 <li>Added <b>TCP SACK</b> and the <b>SACK emulation</b>. Added an Attribute to TcpSocketBase class,
    96     called "Sack", to enable or disable the SACK option usage.</li>
    97 <li>In 'src/wifi', several changes were made to enable partial <b>802.11ax</b> High Effiency (HE) support:
    98     <ul>
    99       <li>A new standard value has been added that enables the new 11ax data rates.</li>
   100       <li>A new 11ax preamble has been added.</li>
   101       <li>A new attribute was added to configure the guard interval duration for High Efficiency (HE) PHY entities. This attribute can be set using the YansWifiPhyHelper.</li>
   102       <li>A new information element has been added:  HeCapabilities. This information element is added to the MAC frame header if the node is a HE node. This HeCapabilites information element is used to advertise the HE capabilites of the node to other nodes in the network.</li>
   103     </ul>
   104 </li>
   105 <li> A new class were added for the RRPAA WiFi rate control mechanism.</li>
   106 <li>Included carrier aggregation feature in LTE module</li>
   107     <ul>
   108       <li>LTE model is extended to support carrier aggregation feature according to 3GPP Release 10, for up to 5 component 
   109       carriers. </li>
   110       <li>InstallSingleEnbDevice and InstalSingeUeDevice functions of LteHelper are now constructing LteEnbDevice and LteUeDevice 
   111       according to CA architecture. Each device, UE and eNodeB contains an instance of component carrier manager, and may 
   112       have several component carrier instances.</li>
   113       <li>SAP interfaces are extended to include CA message exchange funtionality.</li>
   114       <li>RRC connection procedure is extended to allow RRC connection reconfiguration for the configuration of the secondary carriers.</li>
   115       <li>RRC measurement reporting is extended to allow measurement reporting from the secondary carriers.</li>
   116       <li>LTE traces are extended to include component carrier id.</li>
   117     </ul>
   118 </li>
   119 <li>Function <b>PrintRoutingTable</b> has been extended to add an optional Time::Units
   120     parameter to specify the time units used on the report.  The new parameter is
   121     optional and if not specified defaults to the previous behavior (Time::S).
   122 </li>
   123 <li><b>TxopTrace</b>: new trace source exported by EdcaTxopN.</li>
   124 <li>A <b>GetDscpCounts</b> method is added to <b>Ipv4FlowClassifier</b> and <b>Ipv6FlowClassifier</b>
   125     which returns a vector of pairs (dscp,count), each of which indicates how many packets with the
   126     associated dscp value have been classified for a given flow.
   127 </li>
   128 <li>MqQueueDisc, a multi-queue aware queue disc modelled after the mq qdisc in Linux, has been introduced.
   129 </li>
   130 <li>Two new methods, <b>QueueDisc::DropBeforeEnqueue()</b> and <b>QueueDisc::DropAfterDequeue()</b> have
   131     been introduced to replace <b>QueueDisc::Drop()</b>. These new methods require the caller to specify the
   132     reason why a packet was dropped. Correspondingly, two new trace sources ("DropBeforeEnqueue" and
   133     "DropAfterDequeue") have been added to the QueueDisc class, providing both the items that were dropped
   134     and the reason why they were dropped. 
   135 </li>
   136 <li>Added <b>QueueDisc::GetStats()</b> which returns detailed statistics about the operations of
   137     a queue disc. Statistics can be accessed through the member variables of the returned object and
   138     by calling the <b>GetNDroppedPackets()</b>, <b>GetNDroppedBytes()</b>, <b>GetNMarkedPackets()</b> and <b>GetNMarkedBytes()</b> methods on the returned object. Such methods return the number of packets/bytes
   139     dropped/marked for the specified reason (passed as argument). Consequently:
   140     <ul>
   141       <li>A number of methods of the QueueDisc class have been removed: <b>GetTotalReceivedPackets()</b>,
   142       <b>GetTotalReceivedBytes()</b>, <b>GetTotalDroppedPackets()</b>, <b>GetTotalDroppedBytes()</b>,
   143       <b>GetTotalRequeuedPackets()</b>, <b>GetTotalRequeuedBytes()</b>.</li>
   144       <li>The <b>Stats</b> struct and the <b>GetStats()</b> method of <b>RedQueueDisc</b> and <b>PieQueueDisc</b> have been removed and replaced by those of the QueueDisc base class.</li>
   145       <li>The <b>GetDropOverLimit</b> and <b>GetDropCount</b> methods of <b>CoDelQueueDisc</b> have been removed.
   146       The values they returned can be obtained by calling, respectively,
   147       GetStats ().GetNDroppedPackets (CoDelQueueDisc::OVERLIMIT_DROP) and
   148       GetStats ().GetNDroppedPackets (CoDelQueueDisc::TARGET_EXCEEDED_DROP). The "DropCount" trace of
   149       <b>CoDelQueueDisc</b> has been removed as well. Packets dropped because the target is exceeded can
   150       be obtained through the new "DropAfterDequeue" trace of the QueueDisc class.</li>
   151     </ul>
   152 </li>
   153 <li> The new <b>QueueDisc::Mark()</b> method has been introduced to allow subclasses to request to mark a packet.
   154      The  caller must specify the reason why the packet must be marked. Correspondingly, a new trace source ("Mark")
   155      has been added to the QueueDisc class, providing both the items that were marked and the reason why they
   156      were marked.
   157 </li>
   158 <li>A new trace source, <b>SojournTime</b>, is exported by the QueueDisc base class to provide the
   159     sojourn time of every packet dequeued from a queue disc. This has been made possible by adding a
   160     timestamp to QueueDiscItem objects, which can be set/get through the new <b>GetTimeStamp()</b> and
   161     <b>SetTimeStamp()</b> methods of the QueueDiscItem class. The <b>CoDel</b> queue disc now makes use of such feature of the base class, hence its Sojourn trace source and the CoDelTimestampTag class
   162     have been removed.
   163 </li>
   164 </ul>
   165 <h2>Changes to existing API:</h2>
   166 <ul>
   167 <li><b>ParetoRandomVariable</b> "Mean" attribute has been deprecated, 
   168     the "Scale" Attribute have to be used instead.
   169     Changing the Mean attribute has no more an effect on the distribution.
   170     See the documentation for the relationship between Mean, Scale and Shape. 
   171 </li>
   172 <li>The default logging timestamp precision has been changed from 6 digits
   173     to 9 digits, with a fixed format to ensure that 9 digits to the right of
   174     the decimal point are always printed.  Previously, default C++ iostream
   175     precision and formatting was used.
   176 </li>
   177 <li>Abstract base class <b>WifiChannel</b> has been removed. As a result, a Channel type instead of a WifiChannel type
   178 is now exported by WifiNetDevice.</li>
   179 <li> The <b>GetPacketSize</b> method of <b>QueueItem</b> has been renamed <b>GetSize</b>
   180 </li>
   181 <li> The <b>DequeueAll</b> method of <b>Queue</b> has been renamed <b>Flush</b>
   182 </li>
   183 <li>The attributes <b>WifiPhy::TxAntennas</b> and <b>WifiPhy::RxAntennas</b>,
   184     and the related accessor methods, were replaced by <b>WifiPhy::MaxSupportedTxSpatialStreams</b>
   185     and <b>WifiPhy::MaxSupportedRxSpatialStreams</b>. A new attribute <b>WifiPhy::Antennas</b>
   186     was added to allow users to define the number of physical antennas on the device.
   187 </li>
   188 <li>Sockets do not receive anymore broadcast packets, unless they are bound to an "Any" address (0.0.0.0)
   189     or to a subnet-directed broadcast packet (e.g., x.y.z.0 for a /24 noterok).
   190     As in Linux, the following rules are now enforced:
   191     <ul>
   192     <li> A socket bound to 0.0.0.0 will receive everything.</li>
   193     <li> A socket bound to x.y.z.0/24 will receive subnet-directed broadcast (x.y.z.255) and unicast packets.</li>
   194     <li> A socket bound to x.y.z.w will only receive unicast packets.</li>
   195     </ul> 
   196     <b>Previously, a socket bound to an unicast address received also subnet-directed broadcast packets. 
   197     This is not anymore possible</b>.
   198 </li>
   199 <li>You can now Bind as many socket as you want to an address/port, provided that they are bound to different NetDevices.
   200     Moreover, BindToNetDevice does not anymore call Bind. In other terms, Bind and BindToNetDevice can be called
   201     in any order.
   202     However, it is suggested to use BindToNetDevice <i>before</i> Bind in order to avoid conflicts.
   203 </li>
   204 </ul>
   205 <h2>Changes to build system:</h2>
   206 <ul>
   207 <li> The API scanning process for Python bindings now relies on CastXML, and only 64-bit scans are presently supported (Linux 64-bit systems).  Generation of 32-bit scans is documented in the Python chapter of the ns-3 manual.
   208 </li>
   209 <li> Modules can now be located in the 'contrib/' directory in addition to 'src/'
   210 </li>
   211 <li> Behavior for running Python programs was aligned with that of C++ programs; the list of modules built is no longer printed out.
   212 </li>
   213 </ul>
   214 <h2>Changed behavior:</h2>
   215 <ul>
   216 <li><b>MultiModelSpectrumChannel</b> does not call StartRx for receivers that
   217     operate on subbands orthogonal to transmitter subbands. Models that depend
   218     on receiving signals with zero power spectral density from orthogonal bands
   219     may change their behavior.
   220     See <a href=https://www.nsnam.org/bugzilla/show_bug.cgi?id=2467>bug 2467</a>
   221     for discussion.
   222 </li>
   223 <li><b>Packet Tag objects</b> are no longer constrained to fit within 21 
   224     bytes; a maximum size is no longer enforced.
   225 </li>
   226   <li> The default value of the <b>TxGain</b> and <b>RxGain</b> attributes in WifiPhy was changed from 1 dB to 0 dB.
   227   </li>
   228   <li> The reported SNR by WifiPhy::MonitorSnifferRx did not include the RxNoiseFigure, but now does; see <a href=https://www.nsnam.org/bugzilla/show_bug.cgi?id=2783>bug 2783</a> for discussion.
   229   </li>
   230 <li><b>Queue</b> has been redesigned as a template class object, where the type parameter
   231     specifies the type of items to be stored in the queue. As a consequence:
   232     <ul>
   233       <li>Being a subclass of Queue, <b>DropTailQueue</b> is a template class as well.
   234       <li>Network devices such as SimpleNetDevice, PointToPointNetDevice and CsmaNetDevice
   235       use a queue of type Queue&lt;Packet&gt; to store the packets to transmit. The SetQueue
   236       method of their helpers, however, can still be invoked as, e.g.,
   237       SetQueue ("ns3::DropTailQueue") instead of, e.g., SetQueue
   238       ("ns3::DropTailQueue&lt;Packet&gt;").</li>
   239       <li>The attributes <b>Mode</b>, <b>MaxPackets</b> and <b>MaxBytes</b> are now
   240       defined by the QueueBase class (which Queue is derived from).</li>
   241     </ul>
   242 </li>
   243 <li>Queue discs that can operate both in packet mode and byte mode (Red, CoDel, Pie) define their own
   244     enum QueueDiscMode instead of using QueueBase::QueueMode.
   245 </li>
   246 <li>The CoDel, PIE and RED queue discs require that the size of the internal queue is the same as
   247     the queue disc limit (previously, it was allowed to be greater than or equal).
   248 </li>
   249   <li> The default value of the <b>EnableBeaconJitter</b> attribute in ApWifiMac was changed from false to true.
   250   </li>
   251   <li> The NormalClose() callback of a TcpSocket object used to fire upon leaving TIME_WAIT state (2*MSL after FINs have been exchanged).  It now fires upon entering TIME_WAIT state.  Timing of the callback for the other path to state CLOSED (through LAST_ACK) has not been changed.
   252   </li>
   253 </ul>
   254 
   255 <hr>
   256 <h1>Changes from ns-3.25 to ns-3.26</h1>
   257 <h2>New API:</h2>
   258 <ul>
   259 <li>A <b>SocketPriorityTag</b> is introduced to carry the packet priority. Such a tag
   260     is added to packets by sockets that support this mechanism (UdpSocketImpl,
   261     TcpSocketBase and PacketSocket). The base class Socket has a new SetPriority
   262     method to set the socket priority. When the IPv4 protocol is used, the
   263     priority is set based on the ToS. See the Socket options section of the
   264     Network model for more information.
   265 </li>
   266 <li>A <b>WifiNetDevice::SelectQueue</b> method has been added to determine the user
   267     priority of an MSDU. This method is called by the traffic control layer before
   268     enqueuing a packet in the queue disc, if a queue disc is installed on
   269     the outgoing device, or passing a packet to the device, otherwise. The
   270     user priority is set to the three most significant bits of the DS field
   271     (TOS field in case of IPv4 and Traffic Class field in case of IPv6). The
   272     packet priority carried by the SocketPriorityTag is set to the user priority.
   273 </li>
   274 <li>The <b>PfifoFastQueueDisc</b> classifies packets into bands based on their priority.
   275     See the pfifo_fast queue disc section of the Traffic Control Layer model
   276     for more information.
   277 </li>
   278 <li>A new class <b>SpectrumWifiPhy</b> has been introduced that makes use of the 
   279     Spectrum module.  Its functionality and API is currently very similar to that 
   280     of the YansWifiPhy, especially because it reuses the same InterferenceHelper 
   281     and ErrorModel classes (for this release).  Some example programs in the 
   282     'examples/wireless/' directory, such as 'wifi-spectrum-per-example.cc', 
   283     illustrate how the SpectrumWifiPhy class can be substituted for the default 
   284     YansWifiPhy PHY model.
   285 </li>
   286 <li>We have added support for generating traces for the
   287     <a href="https://wilseypa.github.io/desMetrics">DES Metrics</a> project.
   288     These can be enabled by adding <tt>--enable-des-metrics</tt> at configuration;
   289     you must also use <tt>CommandLine</tt> in your script.  See the API docs
   290     for class <b>DesMetrics</b> for more details.
   291 </li>
   292 <li> The traffic control module now includes the <b>FQ-CoDel</b> and <b>PIE</b> queue disc 
   293     models, and behavior corresponding to Linux <b>Byte Queue Limits (BQL)</b>.
   294 </li>
   295 <li> Several new TCP congestion control variants were introduced, including
   296     <b>TCP Vegas, Scalable, Veno, Illinois, Bic, YeAH, and H-TCP</b> 
   297     congestion control algorithms.
   298 </li>
   299 </ul>
   300 <h2>Changes to existing API:</h2>
   301 <ul>
   302 <li><b>SocketAddressTag</b> was a long-standing approach to approximate the POSIX
   303     socket recvfrom behavior (i.e., to know the source address of a packet) 
   304     without actually calling RecvFrom.  Experience with this revealed that
   305     this option was difficult to use with tunnels (the new tag has to 
   306     replace the old one).  Moreover, there is no real need 
   307     to create a new API when there is a an existing one (i.e., RecvFrom).
   308     As a consequence, SocketAddressTag has been completely removed from ns-3.
   309     Users can use RecvFrom (for UDP), GetPeerName (for TCP), or similar. 
   310 </li>
   311 <li><b>InetSockAddress</b> can now store a ToS value, which can be set through its
   312     SetTos method. The Bind and Connect methods of UDP (UdpSocketImpl) and
   313     TCP (TcpSocketBase) sockets set the socket ToS value to the value provided
   314     through the address input parameter (of type InetSockAddress). See the
   315     Socket options section of the Network model for more information.
   316 </li>
   317 <li>The <b>QosTag</b> is removed as it has been superseded by the SocketPriorityTag.</li>
   318 <li>The <b>Ipv4L3Protocol::DefaultTos</b> attribute is removed.</li>
   319 <li>The attributes <b>YansWifiPhy::Frequency, YansWifiPhy::ChannelNumber, and 
   320     YansWifiPhy::ChannelWidth</b>, and the related accessor methods, were moved to 
   321     base class WifiPhy.  YansWifiPhy::GetChannelFrequencyMhz() was deleted.  
   322     A new method WifiPhy::DefineChannelNumber () was added to allow users to 
   323     define relationships between channel number, standard, frequency, and channel width.
   324 </li>
   325 <li>The class <b>WifiSpectrumValueHelper</b> has been refactored; previously it 
   326     was an abstract base class supporting the WifiSpectrumValue5MhzFactory spectrum 
   327     model.  It now contains various static member methods supporting the creation 
   328     of power spectral densities with the granularity of a Wi-Fi OFDM subcarrier 
   329     bandwidth.  The class <b>WifiSpectrumValue5MhzFactory</b> and its API remain but 
   330     it is not subclassed.
   331  </li>
   332 <li>A new Wifi method <b>InterferenceHelper::AddForeignSignal</b> has been introduced to 
   333     support use of the SpectrumWifiPhy (so that non-Wi-Fi signals may be handled 
   334     as noise power).
   335 </li>
   336 <li>A new Wifi attribute <b>Dcf::TxopLimit</b> has been introduced to add support for 802.11e TXOP.
   337 </li>
   338 </ul>
   339 <h2>Changes to build system:</h2>
   340 <ul>
   341   <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>
   342   <li> The <tt>configure</tt> summary is now sorted, to make it easier to check the status of optional features.</li>
   343 </ul>
   344 <h2>Changed behavior:</h2>
   345 This section is for behavioral changes to the models that were not due to a bug fix.
   346 <ul>
   347   <li>The relationship between Wi-Fi channel number, frequency, channel width, 
   348       and Wi-Fi standard has been revised (see bug 2412).  Previously, ChannelNumber 
   349       and Frequency were attributes of class YansWifiPhy, and the frequency was 
   350       defined as the start of the band.  Now, Frequency has been redefined to be 
   351       the center frequency of the channel, and the underlying device relies on 
   352       the pair of frequency and channel width to control behavior; the channel 
   353       number and Wi-Fi standard are used as attributes to configure frequency 
   354       and channel width.  The wifi module documentation discusses this change 
   355       and the new behavior.
   356   </li>
   357   <li>AODV now honors the TTL in RREQ/RREP and it uses a method 
   358       compliant with <a href="http://www.ietf.org/rfc/rfc3561.txt">RFC 3561</a>.      The node search radius is increased progressively. This could increase 
   359       slightly the node search time, but it also decreases the network 
   360       congestion.
   361   </li>
   362 </ul>
   363 
   364 <hr>
   365 <h1>Changes from ns-3.24 to ns-3.25</h1>
   366 <h2>New API:</h2>
   367 <ul>
   368   <li> In 'src/internet/test', a new environment is created to test TCP properties.</li>
   369   <li> The 'src/traffic-control' module has been added, with new API for adding and configuring queue discs and packet filters.</li>
   370   <li> Related to traffic control, a new interface has been added to the
   371 NetDevice to provide a queue interface to access device queue state and
   372 register callbacks used for flow control.</li>
   373   <li> In 'src/wifi', a new rate control (MinstrelHT) has been added for
   374 802.11n/ac modes.</li>
   375   <li> In 'src/wifi', a new helper (WifiMacHelper) is added and is a merged helper from all previously existing MAC helpers (NqosWifiMacHelper, QosWifiMacHelper, HtWifiMacHelper and VhtWifiMacHelper).</li>
   376   <li> It is now possible to use RIPv2 in IPv4 network simulations.</li>
   377 </ul>
   378 <h2>Changes to existing API:</h2>
   379 <ul>
   380   <li>TCP-related changes:
   381     <ul>
   382       <li>Classes TcpRfc793, TcpTahoe, and TcpReno were removed.</li>
   383       <li>The 'TcpNewReno' log component was effectively replaced by 'TcpCongestionOps'
   384       <li>TCP Hybla and HighSpeed have been added.</li>
   385       <li>Added the concept of Congestion State Machine inside TcpSocketBase.</li>
   386       <li>Merged Fast Recovery and Fast Retransmit inside TcpSocketBase.</li>
   387       <li>Some member variables have been moved from TcpSocketBase inside TcpSocketState. Attributes are not touched.</li>
   388       <li>Congestion control splitted from TcpSocketBase as subclass of TcpCongestionOps.</li>
   389       <li>Added Rx and Tx callbacks on TcpSocketBase.</li>
   390       <li>Added BytesInFlight trace source on TcpSocketBase. The trace is updated when the implementation requests the value.</li>
   391       <li>Added attributes about the number of connection and data retransmission attempts.</li>
   392     </ul>
   393   </li>
   394   <li> ns-3 is now capable of serializing SLL (a.k.a. cooked) headers.
   395        This is used in DCE to allow the generation of pcap directly readable by wireshark.
   396   </li>
   397   <li> In the WifiHelper class in the wifi module, Default has been declared deprecated. This is now immediately handled by the constructor of the class.</li>
   398   <li> The API for configuring 802.11n/ac aggregation has been modified to be more user friendly. As any MAC layer attributes, aggregation parameters can now also be configured through WifiMacHelper::SetType. </li>
   399   <li> The class Queue and subclasses derived from it have been changed in two ways:
   400   <ul>
   401     <li>Queues no longer enqueue simple Packets but instead enqueue QueueItem objects, which include Packet but possibly other information such as headers.</li>
   402     <li>The attributes governing the mode of operation (packets or bytes) and the maximum size have been moved to base class Queue.</li>
   403   </ul>
   404   </li>
   405   <li> Users of advanced queues (RED, CoDel) who have been using them directly in the NetDevice will need to adjust to the following changes:
   406     <ul>
   407       <li> RED and CoDel are no longer specializations of the Queue classe, but are now specializations of the new QueueDisc class. This means that RED and CoDel can now be installed in the context of the new Traffic Control layer instead of as queues in (some) NetDevices. The reason for such a change is to make the ns-3 stack much more similar to that of real operating systems (Linux has been taken as a reference).  Queuing disciplines such as RED and CoDel can now be tested with all the NetDevices, including WifiNetDevices. </li>
   408       <li> NetDevices still use queues to buffer packets. The only subclass of Queue currently available for this purpose is DropTailQueue. If one wants to approximate the old behavior, one needs to set the DropTailQueue MaxPackets attribute to very low values, e.g., 1.</li>
   409       <li> The Traffic Control layer features a mechanism by which packets dropped by the NetDevice are requeued in the queue disc (more precisely: if NetDevice::Send returns false, the packet is requeued), so that they are retransmitted later. This means that the MAC drop traces may include packets that have not been actually lost, because they have been dropped by the device, requeued by the traffic control layer and successfully retransmitted. To get the correct number of packets that have been actually lost, one has to subtract the number of packets requeued from the number of packets dropped as reported by the MAC drop trace. </li>
   410     </ul>
   411   </li>
   412 </ul>
   413 <h2>Changes to build system:</h2>
   414 <ul>
   415   <li> Waf was upgraded to 1.8.19</li>
   416   <li> A new waf build option, --check-profile, was added to allow users to check the currently active build profile.  It is discussed in bug 2202 in the tracker.</li>
   417 </ul>
   418 <h2>Changed behavior:</h2>
   419 This section is for behavioral changes to the models that were not due to a bug fix.
   420 <ul>
   421   <li>TCP behavioral changes:
   422     <ul>
   423       <li>TCP closes connection after a number of failed segment retries,
   424         rather than trying indefinitely. The maximum number of retries, for both SYN
   425         attempts and data attempts, is controlled by attributes.</li>
   426       <li>Congestion algorithms not compliant with Fast Retransmit
   427         and Fast Recovery (TCP 793, Reno, Tahoe) have been removed.</li>
   428     </ul>
   429   </li>
   430   <li> 802.11n/ac MPDU aggregation is now enabled by default for both AC_BE and AC_VI.</li>
   431   <li> The introduction of the traffic control layer leads to some additional buffering by default in the stack; when a device queue fills up, additional packets become enqueued at the traffic control layer.</li>
   432 </ul>
   433 
   434 <hr>
   435 <h1>Changes from ns-3.23 to ns-3.24</h1>
   436 <h2>New API:</h2>
   437 <ul>
   438   <li>In 'src/wifi', several changes were made to enable partial 802.11ac support:
   439     <ul>
   440       <li>A new helper (VhtWifiMacHelper) was added to set up a Very high throughput (VHT) MAC entity.</li>
   441       <li>A new standard value has been added that enables the new 11ac data rates.</li>
   442       <li>A new 11ac preamble has been added.</li>
   443       <li>A new information element has been added:  VhtCapabilities. This information element is added to the MAC frame header if the node is a VHT node. This VhtCapabilites information element is used to advertise the VHT capabilites of the node to other nodes in the network.</li>
   444     </ul>
   445   </li>
   446   <li>The ArpCache API was extended to allow the manual removal of ArpCache entries and the addition of permanent (static) entries for IPv4.
   447   </li>
   448   <li> The SimpleChannel in the 'network' module now allows per-NetDevice blacklists, in order to do hidden terminal testcases.
   449   </li>
   450 </ul>
   451 <h2>Changes to existing API:</h2>
   452 <ul>
   453   <li> The signatures on several TcpHeader methods were changed to take const arguments.</li>
   454   <li> class TcpL4Protocol replaces Send() methods with SendPacket(), and adds new methods to AddSocket() and RemoveSocket() from a node.  Also, a new PacketReceived() method was introduced to get the TCP header of an incoming packet and check its checksum.</li>
   455   <li> The CongestionWindow and SlowStartThreshold trace sources have been moved from the TCP subclasses such as NewReno, Reno, Tahoe, and Westwood to the TcpSocketBase class.</li>
   456   <li> The WifiMode object has been refactored:
   457     <ul>
   458       <li>11n data rates are now renamed according to their MCS value. E.g. OfdmRate65MbpsBW20MHz has been renamed into HtMcs7. 11ac data rates have been defined according to this new renaming.</li>
   459       <li>HtWifiMacHelper and VhtWifiMacHelper provide a helper to convert a MCS value into a data rate value.</li>
   460       <li>The channel width is no longer tied to the wifimode. It is now included in the TXVECTOR.</li>
   461       <li>The physical bitrate is no longer tied to the wifimode. It is computed based on the selected wifimode and on the TXVECTOR parameters (channel width, guard interval and number of spatial streams).</li>
   462     </ul>
   463   </li>
   464 </ul>
   465 <h2>Changes to build system:</h2>
   466 <ul>
   467   <li> Waf was upgraded to 1.8.12</li>
   468   <li> Waf scripts and test.py test runner program were made compatible with Python 3</li>
   469 </ul>
   470 <h2>Changed behavior:</h2>
   471 This section is for behavioral changes to the models that were not due to a bug fix.
   472 <ul>
   473 </ul>
   474 
   475 <hr>
   476 <h1>Changes from ns-3.22 to ns-3.23</h1>
   477 <h2>New API:</h2>
   478 <ul>
   479   <li> The mobility module includes a GeographicPositions class used to
   480 convert geographic to cartesian coordinates, and to generate randomly
   481 distributed geographic coordinates.
   482   </li>
   483   <li>  The spectrum module includes new TvSpectrumTransmitter classes and helpers to create television transmitter(s) that transmit PSD spectrums customized by attributes such as modulation type, power, antenna type, channel frequency, etc.
   484   </li>
   485 </ul>
   486 <h2>Changes to existing API:</h2>
   487 <ul>
   488   <li> In LteSpectrumPhy, LtePhyTxEndCallback and the corresponding methods have been removed, since they were unused.
   489   </li>
   490   <li> In the DataRate class in the network module, CalculateTxTime has been declared deprecated.  CalculateBytesTxTime and CalculateBitsTxTime are to be used instead.  The return value is a Time, instead of a double.
   491   </li>
   492   <li> In the Wi-Fi InterferenceHelper, the interference event now takes the WifiTxVector as an input parameter, instead of the WifiMode.  A similar change was made to the WifiPhy::RxOkCallback signature.
   493   </li>
   494 </ul>
   495 <h2>Changes to build system:</h2>
   496 <ul>
   497   <li> None </li>
   498 </ul>
   499 <h2>Changed behavior:</h2>
   500 This section is for behavioral changes to the models that were not due to a bug fix.
   501 <ul>
   502   <li> In Wi-Fi, HT stations (802.11n) now support two-level aggregation. The InterferenceHelper now distinguishes between the PLCP and regular payload reception, for higher fidelity modeling.  ACKs are now sent using legacy rates and preambles.  Acces points now establish BSSBasicRateSet for control frame transmissions.  PLCP header and PLCP payload reception have been decoupled to improve PHY layer modeling accuracy.  RTS/CTS with A-MPDU is now fully supported.  
   503   </li>
   504   <li> The mesh module was made more compliant to the IEEE 802.11s-2012 standard and packet traces are now parseable by Wireshark.  
   505   </li>
   506 </ul>
   507 
   508 <hr>
   509 <h1>Changes from ns-3.21 to ns-3.22</h1>
   510 <h2>New API:</h2>
   511 <ul>
   512   <li> New classes were added for the PARF and APARF WiFi power and rate control mechanisms. 
   513   </li>
   514   <li> Support for WiFi 802.11n MPDU aggregation has been added.
   515   </li>
   516   <li> Additional support for modeling of vehicular WiFi networks has been added, including the channel-access coordination feature of IEEE 1609.4.  In addition, a Basic Safety Message (BSM) packet generator and related statistics-gathering classes have been added to the wave module. 
   517   </li>
   518   <li> A complete LTE release bearer procedure is now implemented which can be invoked by calling the new helper method LteHelper::DeActivateDedicatedEpsBearer ().
   519   </li>
   520   <li> It is now possible to print the Neighbor Cache (ARP and NDISC) by using
   521        the RoutingProtocolHelper
   522   </li>
   523   <li> A TimeProbe class has been added to the data collection framework in 
   524        the stats module, enabling TracedValues emitting values of type 
   525        ns3::Time to be handled by the framework.
   526   </li>
   527   <li> A new attribute 'ClockGranularity' was added to the TcpSocketBase class,
   528 to control modeling of RTO calculation.
   529   </li>
   530 </ul>
   531 
   532 <h2>Changes to existing API:</h2>
   533 <ul>
   534   <li> Several deprecated classes and class methods were removed, including EmuNetDevice, RandomVariable and derived classes, Packet::PeekData(), Ipv6AddressHelper::NewNetwork(Ipv6Address, Ipv6Prefix), Ipv6InterfaceContainer::SetRouter(), Ipv4Route::GetOutputTtl(), TestCase::AddTestCase(TestCase*), and TestCase::GetErrorStatus().
   535   </li>
   536   <li> Print methods involving routing tables and neighbor caches, in classes Ipv4RoutingHelper and Ipv6RoutingHelper, were converted to static methods.
   537   </li>  
   538   <li>PointerValue attribute types in class UanChannel (NoiseModel), UanPhyGen (PerModel and SinrModel), UanPhyDual (PerModelPhy1, PerModelPhy2, SinrModelPhy1, and SinrModelPhy2), and SimpleNetDevice (TxQueue), were changed from PointerValue type to StringValue type, making them configurable via the Config subsystem. 
   539   </li>
   540   <li> WifiPhy::CalculateTxDuration() and WifiPhy::GetPayloadDurationMicroSeconds () now take an additional frequency parameter.
   541   </li>
   542   <li> The attribute 'Recievers' in class YansWifiPhy was misspelled, so
   543        this has been corrected to 'Receivers'.
   544   </li>
   545   <li> We have now documented the callback function signatures
   546        for all TracedSources, using an extra (fourth) argument to
   547        TypeId::AddTraceSource to pass the fully-qualified name
   548        of the signature typedef.  To ensure that future TraceSources
   549        are similarly documented, the three argument version of 
   550        AddTraceSource has been deprecated.
   551   </li>	
   552   <li> The "MinRTO" attribute of the RttEstimator class was moved to the TcpSocketBase class.  The "Gain" attribute of the RttMeanDeviation class was replaced 
   553 by new "Alpha" and "Beta" attributes.  
   554   </li>	
   555   <li> Attributes of the TcpTxBuffer and TcpRxBuffer class are now accessible through the TcpSocketBase class.
   556   </li>	
   557   <li> The LrWpanHelper class has a new constructor allowing users to configure a MultiModelSpectrumChannel as an option, and also provides Set/Get API to allow users to access the underlying channel object. 
   558   </li>
   559 </ul>
   560 
   561 <h2>Changes to build system:</h2>
   562 <ul>
   563   <li> waf was upgraded to version 1.7.16
   564   </li>
   565 </ul>
   566 
   567 <h2>Changed behavior:</h2>
   568 This section is for behavioral changes to the models that were not due to a bug fix.
   569 <ul>
   570   <li> The default value of the `Speed` attribute of ConstantSpeedPropagationDelayModel was changed from 300,000,000 m/s to 299,792,458 m/s (speed of light in a vacuum), causing propagation delays using this model to vary slightly.
   571   </li>
   572   <li> The LrWpanHelper object was previously instantiating only a LogDistancePropagationLossModel on a SingleModelSpectrumChannel, but no PropagationDelayModel.  The constructor now adds by default a ConstantSpeedPropagationDelayModel.
   573   </li>
   574   <li> The Nix-vector routing implementation now uses a lazy flush mechanism,
   575        which dramatically speeds up the creation of large topologies.
   576   </li>
   577 </ul>
   578 
   579 <hr>
   580 <h1>Changes from ns-3.20 to ns-3.21</h1>
   581 <h2>New API:</h2>
   582 <ul>
   583   <li> New "const double& SpectrumValue:: operator[] (size_t index) const".
   584   </li>
   585   <li> A new TraceSource has been added to TCP sockets: SlowStartThreshold.
   586   </li>
   587   <li> New method CommmandLine::AddValue (name, attibutePath) to provide a
   588        shorthand argument "name" for the Attribute "path".  This also has
   589        the effect of including the help string for the Attribute in the
   590        Usage message.
   591   </li>
   592   <li> The GSoC 2014 project in the LTE module has brought some additional APIs:
   593     <ul>
   594       <li>a new abstract class LteFfrAlgorithm, which every future
   595           implementation of frequency reuse algorithm should inherit from</li>
   596       <li>a new SAPs: one between MAC Scheduler and FrAlgorithm, one between
   597 	  RRC and FrAlgorithm</li>
   598       <li>new attribute to enable Uplink Power Control in LteUePhy</li>
   599       <li>new LteUePowerControl class, an implementation of Uplink Power Control, which is 
   600           configurable by attributes. ReferenceSignalPower is sent by eNB in SIB2. 
   601           Uplink Power Control in Closed Loop Accumulative Mode is enabled by default</li>
   602       <li>seven different Frequency Reuse Algorithms (each has its own attributes): </li>
   603         <ul>
   604           <li>LteFrNoOpAlgorithm</li>
   605           <li>LteFrHardAlgorithm</li>
   606           <li>LteFrStrictAlgorithm</li>
   607           <li>LteFrSoftAlgorithm</li>
   608           <li>LteFfrSoftAlgorithm</li>
   609           <li>LteFfrEnhancedAlgorithm</li>
   610           <li>LteFfrDistributedAlgorithm</li>
   611         </ul>
   612       <li>attribute in LteFfrAlgorithm to set FrCellTypeId which is used in automatic 
   613           Frequency Reuse algorithm configuration</li>
   614       <li>LteHelper has been updated with new methods related to frequency reuse algorithm: 
   615           SetFfrAlgorithmType and SetFfrAlgorithmAttribute</li>
   616     </ul>
   617   </li>
   618   <li> A new SimpleNetDeviceHelper can now be used to install SimpleNetDevices.
   619   </li>
   620   <li> New PacketSocketServer and PacketSocketClient apps, meant to be used in tests.
   621   </li>
   622   <li> Tcp Timestamps and Window Scale options have been added and are enabled by default (controllable by attribute).
   623   </li>
   624   <li> A new CoDel queue model has been added to the 'internet' module.  
   625   </li>
   626   <li> New test macros NS_TEST_ASSERT_MSG_GT_OR_EQ() and NS_TEST_EXPECT_MSG_GT_OR_EQ() have been added.
   627   </li>
   628 </ul>
   629 
   630 <h2>Changes to existing API:</h2>
   631 <ul>
   632   <li> "Icmpv6L4Protocol::ForgeEchoRequest" is now returning a packet with the proper IPv6 header.
   633   </li>
   634   <li> The TCP socket Attribute "SlowStartThreshold" has been renamed "InitialSlowStartThreshold" to
   635        clarify that the effect is only on the initial value.
   636   </li>
   637   <li> all schedulers were updated to interact with FR entity via FFR-SAP. Only PF, PSS, CQA, 
   638        FD-TBFQ, TD-TBFQ schedulers supports Frequency Reuse functionality. In the beginning 
   639        of scheduling process, schedulers ask FR entity for avaiable RBGs and then ask if UE 
   640        can be scheduled on RB</li>
   641   <li> eNB RRC interacts with FFR entity via RRC-FFR SAP</li>
   642   <li> new DL-CQI generation approach was implemented. Now DL-CQI is computed from control channel as signal
   643        and data channel (if received) as interference. New attribute in LteHelper was added to specify 
   644        DL-CQI generation approach. New approach is default one in LteHelper </li>
   645   <li> RadioEnvironmentMap can be generated for Data or Control channel and for specified RbId;
   646        Data or Control channel and RbId can be configured by new attributes in RadioEnvironmentMapHelper </li>
   647   <li> lte-sinr-chunk-processor refactored to lte-chunk-processor. Removed all lte-xxx-chunk-processor 
   648        implementations</li>
   649   <li> BindToNetDevice affects also sockets using IPv6.</li>
   650   <li> BindToNetDevice now calls implicitly Bind (). To bind a socket to a NetDevice and to a specific address,
   651        the correct sequence is Bind (address) - BindToNetDevice (device). The opposite will raise an error.</li>
   652 </ul>
   653 
   654 <h2>Changes to build system:</h2>
   655 <ul>
   656 <li> None for this release. </li>
   657 </ul>
   658 
   659 <h2>Changed behavior:</h2>
   660 <ul>
   661 <li> Behavior will be changed due to the list of bugs fixed (listed in RELEASE_NOTES); users are requested to review that list as well.
   662 </ul>
   663 
   664 <hr>
   665 <h1>Changes from ns-3.19 to ns-3.20</h1>
   666 <h2>New API:</h2>
   667 <ul>
   668   <li> Models have been added for low-rate, wireless personal area networks
   669 (LR-WPAN) as specified by IEEE standard 802.15.4 (2006).  The current 
   670 emphasis is on the unslotted mode of 802.15.4 operation for use in Zigbee, 
   671 and the scope is limited to enabling a single mode (CSMA/CA) with basic 
   672 data transfer capabilities. Association with PAN coordinators is not yet 
   673 supported, nor the use of extended addressing. Interference is modeled as 
   674 AWGN but this is currently not thoroughly tested.  The NetDevice Tx queue 
   675 is not limited, i.e., packets are never dropped due to queue becoming full. 
   676 They may be dropped due to excessive transmission retries or channel access 
   677 failure.  </li>
   678   <li> A new IPv6 routing protocol has been added: RIPng. This protocol is
   679   an Interior Gateway Protocol and it is available in the Internet module. </li>
   680   <li> A new LTE MAC downlink scheduling algorithm named Channel and QoS 
   681   Aware (CQA) Scheduler is provided by the new "ns3::CqaFfMacScheduler" object.
   682   </li>
   683   <li> Units may be attached to Time objects, to facilitate specific output
   684   formats (see Time::As()) </li>
   685   <li> FlowMonitor "SerializeToXml" functions are now directly available
   686   from the helper.  </li>
   687   <li> Access to OLSR's HNA table has been enabled </li>
   688 </ul>
   689 
   690 <h2>Changes to existing API:</h2>
   691 <ul>
   692   <li> The SixLowPan model can now use uncompressed IPv6 headers. An option to
   693   define the minimum compressed packet size has been added.  </li>
   694   <li> MinDistance wsa replaced by MinLoss in FriisPropagationLossModel, to
   695   better handle conditions outside of the assumed far field region. </li>
   696   <li> In the DSR model, the attribute DsrOptionRerrHeader::ErrorType" has
   697   been removed. </li>
   698 </ul>
   699 
   700 <h2>Changes to build system:</h2>
   701 <ul>
   702   <li> Python 3.3 is now supported for Python bindings for ns-3.  Python 3.3 
   703   support for API scanning is not supported.  Python 3.2 is not supported.</li>
   704   <li>  Enable selection of high precision int64x64_t implementation
   705   at configure time, for debugging purposes.</li>
   706   <li> Optimized builds are now enabling signed overflow optimization 
   707   (-fstrict-overflow) and for gcc 4.8.2 and greater, also warning for cases 
   708   where an optimizization may occur due to compiler assumption that 
   709   overflow will not occur. </li>
   710 </ul>
   711 
   712 <h2>Changed behavior:</h2>
   713 <ul>
   714   <li> The Internet FlowMonitor can now track IPv6 packets.  </li>
   715   <li> Ipv6Extension::m_dropTrace has been removed. Ipv6L3Protocol::m_dropTrace
   716   is now fired when appropriate.  </li>
   717   <li> IPv4 identification field value is now dependent on the protocol 
   718   field.  </li>
   719   <li> Point-to-point trace sources now contain PPP headers </li>
   720 </ul>
   721 
   722 <hr>
   723 <h1>Changes from ns-3.18.1 to ns-3.19</h1>
   724 
   725 <h2>New API:</h2>
   726 <ul>
   727   <li> A new wifi extension for vehicular simulation support is available in the
   728     src/wave directory.  The current code represents an interim capability to 
   729     realize an IEEE 802.11p-compliant device, but without the WAVE extensions 
   730     (which are planned for a later patch).  The WaveNetDevice modelled herein 
   731     enforces that a WAVE-compliant physical layer (at 5.9 GHz) is selected, and 
   732     does not require any association between devices (similar to an adhoc WiFi 
   733     MAC), but is otherwise similar (at this time) to a WifiNetDevice.  WAVE 
   734     capabililties of switching between control and service channels, or using 
   735     multiple radios, are not yet modelled.
   736   </li>
   737   <li>New SixLowPanNetDevice class providing a shim between 
   738     IPv6 and real NetDevices. The new module implements 6LoWPAN:
   739     "Transmission of IPv6 Packets over IEEE 802.15.4 Networks" (see
   740     <a href="http://www.ietf.org/rfc/rfc4944.txt">RFC 4944</a> and
   741     <a href="http://www.ietf.org/rfc/rfc6262.txt">RFC 6262</a>), 
   742     resulting in a heavy header compression for IPv6 packets.
   743     The module is intended to be used on 802.15.4 NetDevices, but
   744     it can be used over other NetDevices. See the manual for
   745     further discussion.
   746   </li>
   747   <li> LteHelper has been updated with some new APIs:
   748     <ul>
   749       <li>new overloaded Attach methods to enable UE to automatically determine
   750           the eNodeB to attach to (using initial cell selection);</li>
   751       <li>new methods related to handover algorithm: SetHandoverAlgorithmType
   752           and SetHandoverAlgorithmAttribute;</li>
   753       <li>a new attribute AnrEnabled to activate/deactivate Automatic Neighbour
   754           Relation (ANR) function; and</li>
   755       <li>a new method SetUeDeviceAttribute for configuring LteUeNetDevice.</li>
   756     </ul>
   757   </li>
   758   <li> The GSoC 2013 project in the LTE module has brought some additional APIs:
   759     <ul>
   760       <li>a new abstract class LteHandoverAlgorithm, which every future
   761           implementation of automatic handover trigger should inherit from;</li>
   762       <li>new classes LteHandoverAlgorithm and LteAnr as sub-modules of
   763           LteEnbNetDevice class; both interfacing with the LteEnbRrc sub-module
   764           through Handover Management SAP and ANR SAP;</li>
   765       <li>new attributes in LteEnbNetDevice and LteUeNetDevice classes related
   766           to Closed Subscriber Group (CSG) functionality in initial cell
   767           selection;</li>
   768       <li>new attributes in LteEnbRrc for configuring UE measurements' filtering
   769           coefficient (i.e., quantity configuration);</li>
   770       <li>a new public method AddUeMeasReportConfig in LteEnbRrc for setting up
   771           custom UE measurements' reporting configuration; measurement reports
   772           can then be captured from the RecvMeasurementReport trace source;
   773           and</li>
   774       <li>new trace sources in LteUeRrc to capture more events, such as System
   775           Information messages (MIB, SIB1, SIB2), initial cell selection, random
   776           access, and handover.</li>
   777     </ul>
   778   </li>
   779   <li>A new parallel scheduling algorithm based on null messages, a common 
   780   parallel DES scheduling algorithm, has been added.  The null message 
   781   scheduler has better scaling properties when running on some scenarios
   782   with large numbers of nodes since it does not require a global 
   783   communication.
   784   </li>
   785 </ul>
   786 
   787 <h2>Changes to existing API:</h2>
   788 <ul>
   789     <li> It is now possible to use Ipv6PacketInfoTag from UDP applications in the
   790       same way as with Ipv4PacketInfoTag. See Doxygen for current limitations in
   791   	  using Ipv[4,6]PacketInfoTag to set IP properties.</li>
   792     <li>A change is introduced for the usage of the EpcHelper
   793       class. Previously, the EpcHelper class included both the API
   794       definition and its (only) implementation; as such, users would
   795       instantiate and use the EpcHelper class directly in their
   796       simulation programs. From now on,
   797       EpcHelper is just the base class defining the API, and the
   798       implementation has been moved to derived classes; as such,
   799       users are now expected to use one of the derived classes in
   800       their simulation program. The implementation previously
   801       provided by the EpcHelper class has been moved to the new
   802       derived class PointToPointEpcHelper.</li>
   803   <li> The automatic handover trigger and ANR functions in LTE module have been
   804     moved from LteEnbRrc class to separate classes. As a result, the related
   805     attributes, e.g., ServingCellHandoverThreshold, NeighbourCellHandoverOffset,
   806     EventA2Threshold, and EventA4Threshold have been removed from LteEnbRrc
   807     class. The equivalent attributes are now in A2A4RsrqHandoverAlgorithm and
   808     LteAnr classes.</li>
   809   <li> Master Information Block (MIB) and System Information Block Type 1 (SIB1)
   810     are now transmitted as LTE control messages, so they are no longer part of
   811     RRC protocol.</li>
   812   <li> UE RRC state model in LTE module has been considerably modified and is
   813     not backward compatible with the previous state model.</li>
   814   <li> Additional time units (Year, Day, Hour, Minute) were added to the time
   815   value class that represents simulation time; the largest unit prior to 
   816   this addition was Second.
   817   </li>
   818   <li> SimpleNetDevice and SimpleChannel are not so simple anymore. SimpleNetDevice can be now a
   819        Broadcast or PointToPoint NetDevice, it can have a limited bandwidth and it uses an output
   820        queue.       
   821   </li>
   822 </ul>
   823 
   824 <h2>Changes to build system:</h2>
   825 
   826 <h2>Changed behavior:</h2>
   827 <ul>
   828   <li> For the TapBridge device, in UseLocal mode there is a MAC learning function. TapBridge has been waiting for the first packet received from tap interface to set the address of the bridged device to the source address of the first packet. This has caused problems with WiFi.  The new behavior is that after connection to the tap interface, ns-3 learns the MAC address of that interface with a system call and immediately sets the address of the bridged device to the learned one.  See <a href="https://www.nsnam.org/bugzilla/show_bug.cgi?id=1777">bug 1777</a> for more details.</li>
   829   <li> TapBridge device now correctly implements IsLinkUp() method.</li>
   830   <li> IPv6 addresses and routing tables are printed like in Linux "route -A inet6" command.</li>
   831   <li> A change in Ipv[4,6]Interface enforces the correct behaviour of IP 
   832     when a device do not support the minimum MTU requirements.
   833     This is set to 68 and 1280 octects respectively.  IP simulations that
   834     may have run over devices with smaller MTUs than 68 or 1280, respectively,
   835     will no longer be able to use such devices.</li>
   836 </ul>
   837 
   838 <hr>
   839 <h1>Changes from ns-3.18 to ns-3.18.1</h1>
   840 <h2>New API:</h2>
   841 <ul>
   842   <li> It is now possible to randomize the time of the first beacon from an
   843   access point.  Use an attribute "EnableBeaconJitter" to enable/disable
   844   this feature.
   845   </li>
   846   <li> A new FixedRoomPositionAllocator helper class is available; it
   847   allows one to generate a random position uniformly distributed in the
   848   volume of a chosen room inside a chosen building.
   849   </li>
   850 </ul>
   851 
   852 <h2>Changes to existing API:</h2>
   853 <ul>
   854   <li> Logging wildcards:  allow "***" as synonym for "*=**" to turn on all logging.
   855   </li>
   856   <li> The log component list ("NS_LOG=print-list") is now printed alphabetically.
   857   </li>
   858   <li> Some deprecated IEEE 802.11p code has been removed from the wifi module
   859   </li>
   860 </ul>
   861 
   862 <h2>Changes to build system:</h2>
   863 <ul>
   864   <li> The Python API scanning system (./waf --apiscan) has been fixed (bug 1622)
   865   </li> 
   866   <li> Waf has been upgraded from 1.7.11 to 1.7.13
   867   </li> 
   868 </ul>
   869 
   870 <h2>Changed behavior:</h2>
   871 <ul>
   872   <li> Wifi simulations have additional jitter on AP beaconing (see above) and some bug fixes have been applied to wifi module (see RELEASE_NOTES)
   873   </li> 
   874 </ul>
   875 
   876 <hr>
   877 <h1>Changes from ns-3.17 to ns-3.18</h1>
   878 
   879 <h2>New API:</h2>
   880 <ul>
   881   <li>New features have been added to the LTE module:
   882   <ul>
   883     <li>PHY support for UE measurements (RSRP and RSRQ)</li>
   884     <li>RRC support for UE measurements (configuration, execution, reporting)</li>
   885     <li>Automatic Handover trigger based on RRC UE measurement reports</li>
   886   </ul>
   887   <li>Data collection components have been added in the 'src/stats' module.
   888       Data collection includes a Probe class that attaches to ns-3 trace
   889       sources to filter their output, and two Aggregator classes for 
   890       marshaling probed data into text files or gnuplot plots.  The ns-3
   891       tutorial has been extended to illustrate basic functionality. </li>
   892   <li>In 'src/wifi', several changes were made to enable partial 802.11n support:
   893     <ul>
   894       <li>A new helper (HtWifiMacHelper) was added to set up a High Throughput (HT) MAC entity</li>
   895       <li>New attributes were added to help the user setup a High Throughput (HT) PHY entity. These attributes can be set using the YansWifiPhyHelper</li>
   896       <li>A new standard value has been added that enables the new 11n data rates.</li>
   897       <li>New 11n preambles has been added (Mixed format and greenfield). To be able to change Tx duration according to the preamble used, a new class TxVector has been added to carry the transmission parameters (mode, preamble, stbc,..).  Several functions have been updated to allow the passage of TxVector instead of WifiMode in MacLow, WifiRemoteStationManager, WifiPhy, YansWifiPhy,.. </li>
   898       <li>A new information element has been added:  HTCapabilities. This information element is added to the MAC frame header if the node is an HT node. This HTCapabilites information element is used to advertise the HT capabilites of the node to other nodes in the network</li>
   899     </ul>
   900   <li>InternetStackHelper has two new functions:<tt>SetIpv4ArpJitter (bool enable)</tt>
   901       and <tt>SetIpv6NsRsJitter (bool enable)</tt> to enable/disable
   902       the random jitter on the tranmission of IPv4 ARP Request and IPv6 NS/RS. </li>
   903   <li>Bounds on valid time inputs for time attributes can now be enabled.  
   904       See <tt>attribute-test-suite.cc</tt> for an example.</li>
   905   <li>New generic hash function interface provided in the simulation core.  
   906       Two hash functions are provided: murmur3 (default), and the venerable 
   907       FNV1a.  See the Hash Functions section in the ns-3 manual.</li>
   908   <li>New Mac16Address has been added. It can be used with IPv6 to make
   909       an Autoconfigured address.</li>
   910   <li>Mac64Address support has been extended. It can now be used with 
   911       IPv6 to make an Autoconfigured address.</li>
   912   <li>IPv6 can now detect and use Path-MTU. See 
   913       <tt>examples/ipv6/fragmentation-ipv6-two-MTU.cc</tt> for an example.</li>
   914   <li>Radvd application has a new Helper. See the updated 
   915       <tt>examples/ipv6/radvd.cc</tt> for an example.</li>
   916 </ul>
   917 
   918 <h2>Changes to existing API:</h2>
   919 <ul>
   920   <li> The Ipv6InterfaceContainer functions to set a node in forwarding state (i.e., a router) 
   921   and to install a default router in a group of nodes have been extensively changed.
   922   The old function <tt>void Ipv6InterfaceContainer::SetRouter (uint32_t i, bool router)</tt>
   923   is now DEPRECATED.
   924   </li>
   925   <li> The documentation's IPv6 addresses (2001:db8::/32, RFC 3849) are now
   926   dropped by routers.
   927   </li>
   928   <li> The 'src/tools' module has been removed, and most files migrated to
   929   'src/stats'.  For users of these programs (the statistics-processing 
   930   in average.h, or the gnuplot support), the main change is likely to be
   931   replacing the inclusion of "tools-module.h" with "stats-module.h".
   932   Users of the event garbage collector, previously in tools, will now 
   933   include it from the core module.
   934   </li>
   935   <li> The Ipv6 UnicastForwardCallback and  MulticastForwardCallback 
   936   have a new parameter, the NetDevice the packet has been received from.
   937   Existing Ipv6RoutingProtocols should update their RouteInput function
   938   accordingly, e.g., from <tt>ucb (rtentry, p, header);</tt> to <tt>ucb (idev, rtentry, p, header);</tt>
   939   </li>
   940   <li> The previous buildings module relied on a specific MobilityModel called
   941     BuildingsMobilityModel, which supported buildings but only allowed
   942     static positions. This mobility model has been removed. Now, the
   943     Buildings module instead relies on a new class called
   944     MobilityBuildingInfo which can be aggregated to any MobilityModel. This
   945     allows having moving nodes in presence of buildings with any of
   946     the existing MobilityModels. 
   947   </li>
   948   <li>All functions in WifiRemoteStationManager named GetXxxMode have been changed to GetXxxTxVector </li>
   949 </ul>
   950 
   951 <h2>Changes to build system:</h2>
   952 <ul>
   953   <li> Make references to bug id's in doxygen comments with
   954     <tt>\bugid{num}</tt>, where <tt>num</tt> is the bug id number.  This
   955     form will generate a link to the bug in the bug database.
   956   </li>
   957 </ul>
   958 
   959 <h2>Changed behavior:</h2>
   960 <ul>
   961   <li> Now it is possible to request printing command line arguments to the
   962 desired output stream using PrintHelp or operator &lt;&lt;
   963 <pre>
   964   CommandLine cmd;
   965   cmd.Parse (argc, argv);
   966 ...
   967 
   968   std::cerr << cmd;
   969 </pre>
   970 or
   971 <pre>
   972   cmd.PrintHelp (std::cerr);
   973 </pre>
   974   </li>
   975   <li>Command line boolean arguments specified with no integer value (e.g. <tt>"--boolArg"</tt>) will toggle the value from the default, instead of always setting the value to true.
   976   </li>
   977   <li>IPv4's ARP Request and IPv6's NS/RS are now transmitted with a random delay.
   978       The delay is, by default, a uniform random variable in time between 0 and 10ms.
   979       This is aimed at preventing reception errors due to collisions during wifi broadcasts when the sending behavior is synchronized (e.g. due to applications starting at the same time on several different nodes).
   980       This behaviour can be modified by using ArpL3Protocol's 
   981       <tt>RequestJitter</tt> and Icmpv6L4Protocol's <tt>SolicitationJitter</tt>
   982       attributes or by using the new InternetStackHelper functions.
   983   </li>
   984   <li>AODV Hellos are disabled by default. The performance with Hellos enabled and disabled are almost identical. With Hellos enabled, AODV will suppress hellos from transmission, if any recent broadcast such as RREQ was transmitted. The attribute <tt>ns3::aodv::RoutingProtocol::EnableHello</tt> can be used to enable/disable Hellos.
   985 </ul>
   986 
   987 <hr>
   988 <h1>Changes from ns-3.16 to ns-3.17</h1>
   989 
   990 <h2>New API:</h2>
   991 <ul>
   992   <li>New TCP Westwood and Westwood+ models
   993   <li>New FdNetDevice class providing a special NetDevice that is able to read
   994       and write traffic from a file descriptor.  Three helpers are provided
   995       to associate the file descriptor with different underlying devices:  
   996     <ul> 
   997     <li> EmuFdNetDeviceHelper (to associate the |ns3| device with a physical 
   998          device in the host machine).  This helper is intended to
   999          eventually replace the EmuNetDevice in src/emu. </li>
  1000     <li> TapFdNetDeviceHelper (to associate the ns-3 device with the file 
  1001          descriptor from a tap device in the host machine) </li>
  1002     <li> PlanteLabFdNetDeviceHelper (to automate the creation of tap devices 
  1003          in PlanetLab nodes, enabling |ns3| simulations that can send and 
  1004          receive traffic though the Internet using PlanetLab resource.</li>
  1005     </ul> 
  1006   </li>
  1007   <li>In Ipv4ClickRouting, the following APIs were added:
  1008     <ul>
  1009       <li>Ipv4ClickRouting::SetDefines(), accessible through ClickInternetStackHelper::SetDefines(), for the user to set Click defines from the ns-3 simulation file.</li>
  1010       <li>SIMCLICK_GET_RANDOM_INT click-to-simulator command for ns-3 to drive Click's random number generation.</li>
  1011     </ul>
  1012   </li>  
  1013   <li>LTE module
  1014     <ul>
  1015       <li> New user-visible LTE API
  1016       <ul>
  1017         <li>Two new methods have been added to LteHelper to enable the X2-based handover functionality: AddX2Interface, which setups the X2 interface between two eNBs, and HandoverRequest, which is  a convenience method that schedules an explicit handover event to be executed at a given point in the simulation. </li>
  1018         <li>the new LteHelper method EnablePhyTraces can now be used to enable the new PHY traces</li>
  1019       </ul>
  1020       </li> 
  1021       <li> New internal LTE API 
  1022       <ul>
  1023         <li>New LTE control message classes DlHarqFeedbackLteControlMessage, 
  1024          RachPreambleLteControlMessage, RarLteControlMessage, MibLteControlMessage</li>
  1025         <li>New class UeManager
  1026         <li>New LteRadioBearerInfo subclasses LteSignalingRadioBearerInfo, 
  1027          LteDataRadioBearerInfo</li>
  1028         <li>New LteSinrChunkProcessor subclasses LteRsReceivedPowerChunkProcessor, 
  1029          LteInterferencePowerChunkProcessor</li>
  1030       </ul>
  1031       </li>
  1032     </ul>
  1033   </li>
  1034   <li>New DSR API
  1035   <ul>
  1036     <li>Added PassiveBuffer class to save maintenance packet entry for passive acknowledgment option</li>
  1037     <li>Added FindSourceEntry function in RreqTable class to keep track of route request entry received from same source node</li>
  1038     <li>Added NotifyDataReciept function in DsrRouting class to notify the data receipt of the next hop from link layer.  This is used for the link layer acknowledgment.</li>
  1039   </ul>
  1040   </li>
  1041   <li>New Tag, PacketSocketTag, to carry the destination address of a packet and the packet type</li>
  1042   <li>New Tag, DeviceNameTag, to carry the ns3 device name from where a packet is coming</li>
  1043   <li>New Error Model, BurstError model, to determine which bursts of packets are errored corresponding to an underlying distribution, burst rate, and burst size</li>
  1044 </ul>
  1045 
  1046 <h2>Changes to existing API:</h2>
  1047 <ul>
  1048   <li>ns3::Object and subclasses DoStart has been renamed to DoInitialize</li>
  1049   <li>ns3::Object and subclasses Start has been renamed to Initialize</li>
  1050   <li>EnergySource StartDeviceModels renamed to InitializeDeviceModels</li>
  1051   <li>A typo was fixed in an LTE variable name. The variable ns3::AllocationRetentionPriority::preemprionVulnerability was changed to preemptionVulnerability.</li>
  1052   <li>Changes in TestCase API
  1053   <ul>
  1054     <li>TestCase has new enumeration TestDuration containing QUICK, EXTENSIVE, TAKES_FOREVER</li>
  1055     <li>TestCase constructor now requires TestDuration, old constructor marked deprecated</li>
  1056  </ul>
  1057  </li>
  1058   <li>Changes in LTE API
  1059   <ul>
  1060     <li> User-visible LTE API 
  1061     <ul>
  1062       <li>The previous LteHelper method ActivateEpsBearer has been now replaced by two alternative methods: ActivateDataRadioBearer (to be used when the EPC model is not used) and ActivateDedicatedEpsBearer (to be used when the EPC model is used). In the case where the EPC model is used, the default EPS bearer is not automatically activated without the need for a specific method to be called.</li>
  1063     </ul>
  1064     </li> 
  1065     <li> Internal LTE API 
  1066     <ul>
  1067       <li>EpcHelper added methods AddUe, AddX2Interface.  Method AddEnb now requires a cellId.  Signature of ActivateEpsBearer changed to void ActivateEpsBearer (Ptr<NetDevice> ueLteDevice, uint64_t imsi, Ptr<EpcTft> tft, EpsBearer bearer)</li>
  1068       <li>LteHelper added methods EnableDlPhyTraces, EnableUlPhyTraces, EnableDlTxPhyTraces, EnableUlTxPhyTraces, EnableDlRxPhyTraces, EnableUlRxPhyTraces</li>
  1069       <li>LteHelper removed methods EnableDlRlcTraces, EnableUlRlcTraces, EnableDlPdcpTraces, EnableUlPdcpTraces</li>
  1070       <li>RadioBearerStatsCalculator added methods (Set/Get)StartTime, (Set/Get)Epoch, RescheduleEndEpoch, EndEpoch</li>
  1071       <li>RadioBearerStatsCalculator removed methods StartEpoch, CheckEpoch</li>
  1072       <li>RadioBearerStatsCalculator methods UlTxPdu, DlRxPdu now require a cellId</li>
  1073       <li>EpcEnbApplication constructor now requires Ipv4Addresses enbS1uAddress and sgwS1uAddress as well as cellId</li>
  1074       <li>EpcEnbApplication added methods SetS1SapUser, GetS1SapProvider, SetS1apSapMme and GetS1apSapEnb</li>
  1075       <li>EpcEnbApplication removed method ErabSetupRequest</li> 
  1076       <li>EpcSgwPgwApplication added methods SetS11SapMme, GetS11SapSgw, AddEnb, AddUe, SetUeAddress</li>
  1077       <li>lte-common.h new structs PhyTransmissionStatParameters and PhyReceptionStatParameters used in TracedCallbacks</li>
  1078       <li>LteControlMessage new message types DL_HARQ, RACH_PREAMBLE, RAR, MIB</li>
  1079       <li>LteEnbCmacSapProvider new methods RemoveUe, GetRachConfig, AllocateNcRaPreamble, AllocateTemporaryCellRnti</li>
  1080       <li>LteEnbPhy new methods GetLteEnbCphySapProvider, SetLteEnbCphySapUser, GetDlSpectrumPhy, GetUlSpectrumPhy, CreateSrsReport</li>
  1081       <li>LteEnbPhy methods DoSendMacPdu, DoSetTransmissionMode, DoSetSrsConfigurationIndex, DoGetMacChTtiDelay, DoSendLteControlMessage, AddUePhy, DeleteUePhy made private</li>
  1082       <li>LteEnbPhySapProvider removed methods SetBandwidth, SetTransmissionMode, SetSrsConfigurationIndex, SetCellId</li>
  1083       <li>LteEnbPhySapUser added methods ReceiveRachPreamble, UlInfoListElementHarqFeeback, DlInfoListElementHarqFeeback</li>
  1084       <li>LtePdcp added methods (Set/Get)Status</li>
  1085       <li>LtePdcp DoTransmitRrcPdu renamed DoTransmitPdcpSdu</li>
  1086       <li>LteUeRrc new enum State.  New methods SetLteUeCphySapProvider, GetLteUeCphySapUser, SetLteUeRrcSapUser, GetLteUeRrcSapProvider, GetState, GetDlEarfcn, GetDlBandwidth, GetUlBandwidth, GetCellId, SetUseRlcSm .  GetRnti made const.</li> 
  1087       <li>LteUeRrc removed methods ReleaseRadioBearer, GetLcIdVector, SetForwardUpCallback, DoRrcConfigurationUpdateInd</li>
  1088       <li>LtePdcpSapProvider struct TransmitRrcPduParameters renamed TransmitPdcpSduParameters.  Method TransmitRrcPdu renamed TransmitPdcpSdu </li>
  1089       <li>LtePdcpSapUser struct ReceiveRrcPduParameters renamed ReceivePdcpSduParameters.  Method ReceiveRrcPdu renamed TransmitPdcpSdu</li>
  1090       <li>LtePdcpSpecificLtePdcpSapProvider method TransmitRrcPdu renamed TransmitPdcpSdu</li>
  1091       <li>LtePdcpSpecificLtePdcpSapUser method ReceiveRrcPdu  renamed ReceivePdcpSdu. Method ReceiveRrcPdu renamed ReceivePdcpSdu</li>
  1092       <li>LtePhy removed methods DoSetBandwidth and DoSetEarfcn</li>
  1093       <li>LtePhy added methods ReportInterference and ReportRsReceivedPower</li>
  1094       <li>LteSpectrumPhy added methods SetHarqPhyModule, Reset, SetLtePhyDlHarqFeedbackCallback, SetLtePhyUlHarqFeedbackCallback,  AddRsPowerChunkProcessor, AddInterferenceChunkProcessor</li>
  1095       <li>LteUeCphySapProvider removed methods ConfigureRach, StartContentionBasedRandomAccessProcedure, StartNonContentionBasedRandomAccessProcedure</li>
  1096       <li>LteUeMac added method AssignStreams</li>
  1097       <li>LteUeNetDevice methods GetMac, GetRrc, GetImsi  made const</li>
  1098       <li>LteUeNetDevice new method GetNas</li>
  1099       <li>LteUePhy new methods GetLteUeCphySapProvider, SetLteUeCphySapUser, GetDlSpectrumPhy, GetUlSpectrumPhy, ReportInterference, ReportRsReceivedPower, ReceiveLteDlHarqFeedback</li>
  1100       <li>LteUePhy DoSendMacPdu, DoSendLteControlMessage, DoSetTransmissionMode, DoSetSrsConfigurationIndex made private</li>
  1101       <li>LteUePhySapProvider removed methods SetBandwidth, SetTransmissionMode, SetSrsConfigurationIndex</li>
  1102       <li>LteUePhySapProvider added method SendRachPreamble</li>  
  1103     </ul>
  1104    </li>    
  1105   </ul>
  1106   <li>AnimationInterface method EnableIpv4RouteTracking returns reference to calling AnimationInterface object</li>
  1107   <li>To make the API more uniform across the various
  1108   PropagationLossModel classes, the Set/GetLambda methods of the
  1109   FriisPropagationLossModel and TwoRayGroundPropagationLossModel
  1110   classes have been changed to Set/GetFrequency, and now a Frequency
  1111   attribute is exported which replaces the pre-existing Lambda
  1112   attribute. Any previous user code setting a value for Lambda should
  1113   be changed to set instead a value of Frequency = C / Lambda, with C
  1114   = 299792458.0. </li>
  1115 </ul>
  1116 <h2>Changes to build system:</h2>
  1117 <ul>
  1118   <li>Waf shipped with ns-3 has been upgraded to version 1.7.10 and custom
  1119   pkg-config generator has been replaced by Waf's builtin tool.
  1120   </li>
  1121 </ul>
  1122 
  1123 <h2>Changed behavior:</h2>
  1124 <ul>
  1125   <li>DSR link layer notification has changed.  The model originally used 
  1126   "TxErrHeader" in Ptr<WifiMac> to indicate the transmission
  1127   error of a specific packet in link layer; however, it was not working
  1128   correctly.  The model now uses a different path to implement
  1129   the link layer notification mechanism; specifically, looking into the 
  1130   trace file to find packet receive events.  If the model finds one 
  1131   receive event for the data packet, it is used as the indicator for 
  1132   successful data delivery.</li>
  1133 </ul>
  1134 
  1135 <hr>
  1136 <h1>Changes from ns-3.15 to ns-3.16</h1>
  1137 
  1138 <h2>New API:</h2>
  1139 <ul>
  1140 <li>In the Socket class, the following functions were added: 
  1141  <ul>
  1142   <li>(Set/Get)IpTos - sets IP Type of Service field in the IP headers.</li>
  1143   <li>(Set/Is)IpRecvTos - tells the socket to pass information about IP ToS up the stack (by adding SocketIpTosTag to the packet).</li>
  1144   <li>(Set/Get)IpTtl - sets IP Time to live field in the IP headers.</li>
  1145   <li>(Set/Is)RecvIpTtl - tells the socket to pass information about IP TTL up the stack (by adding SocketIpTtlTag to the packet).</li>
  1146   <li>(Set/Is)Ipv6Tclass - sets Traffic Class field in the IPv6 headers.</li>
  1147   <li>(Set/Is)Ipv6RecvTclass - tells the socket to pass information about IPv6 TCLASS up the stack (by adding SocketIpv6TclassTag to the packet).</li>
  1148   <li>(Set/Get)Ipv6HopLimit - sets Hop Limit field in the IPv6 headers.</li>
  1149   <li>(Set/Is)Ipv6RecvHopLimit - tells the socket to pass information about IPv6 HOPLIMIT up the stack (by adding SocketIpv6HoplimitTag to the packet).</li>
  1150  </ul>  
  1151 A user can call these functions to set/get the corresponding socket option. See examples/socket/socket-options-ipv4.cc and examples/socket/socket-options-ipv6.cc for examples.
  1152 </ul>
  1153 
  1154 <h2>Changes to existing API:</h2>
  1155 <ul>
  1156 <li>In the MobilityHelper class, the functions EnableAscii () and EnableAsciiAll () were changed to use output stream wrappers rather than standard C++ ostreams. The purpose of this change was to make them behave analogously to other helpers in ns-3 that generate ascii traces.  Now, the file stream that is open in MobilityHelper is closed nicely upon asserts and program exits.</li>
  1157 </ul>
  1158 
  1159 <h2>Changes to build system:</h2>
  1160 <ul>
  1161 <li>It's now possible to use distcc when building ns-3. See tutorial for details.</li>
  1162 </ul>
  1163 
  1164 <h2>Changed behavior:</h2>
  1165 <ul>
  1166 <li>Sending a packet through Ipv4RawSocket now supports checksum in the Ipv4Header. It is still not possible to manually put in arbitrary checksum as the checksum is automatically calculated at Ipv4L3Protocol. The user has to enable checksum globally for this to work. Simply calling Ipv4Header::EnableChecksum() for a single Ipv4Header will not work.</li>
  1167 <li>Now MultiModelSpectrumChannel allows a SpectrumPhy instance to change SpectrumModel at runtime by issuing a call to MultiModelSpectrumChannel::AddRx (). Previously, MultiModelSpectrumChannel required each SpectrumPhy instance to stick with the same SpectrumModel for the whole simulation. 
  1168 </li>
  1169 </ul>
  1170 
  1171 <hr>
  1172 <h1>Changes from ns-3.14 to ns-3.15</h1>
  1173 
  1174 <h2>New API:</h2>
  1175 <ul>
  1176 <li>A RandomVariableStreamHelper has been introduced to assist with 
  1177 using the Config subsystem path names to assign fixed stream numbers
  1178 to RandomVariableStream objects.</li>
  1179 </ul>
  1180 
  1181 <h2>Changes to existing API:</h2>
  1182 <ul>
  1183 <li>Derived classes of RandomVariable (i.e. the random variable 
  1184 implementations) have been ported to a new RandomVariableStream base class.
  1185 <li>For a given distribution DistributionVariable (such as UniformVariable),
  1186 the new class name is DistributionRandomVariable (such as 
  1187 UniformRandomVariable). </li>
  1188 <li>The new implementations are also derived from class ns3::Object and 
  1189 are handled using the ns-3 smart pointer (Ptr) class.  </li>
  1190 <li>The new variable classes also have a new attributed called "Stream"
  1191 which allows them to be assigned to a fix stream index when assigned
  1192 to the underlying pseudo-random stream of numbers.</li>
  1193 </li>
  1194 </ul>
  1195 
  1196 <h2>Changes to build system:</h2>
  1197 <ul>
  1198 <li></li>
  1199 </ul>
  1200 
  1201 <h2>Changed behavior:</h2>
  1202 <ul>
  1203 <li>Programs using random variables or models that include random variables 
  1204 may exhibit changed output for a given run number or seed, due to a possible 
  1205 change in the order in which random variables are assigned to underlying 
  1206 pseudo-random sequences.  Consult the manual for more information regarding 
  1207 this.</li>
  1208 </ul>
  1209 
  1210 <hr>
  1211 <h1>Changes from ns-3.13 to ns-3.14</h1>
  1212 
  1213 <h2>New API:</h2>
  1214 <ul>
  1215 <li>The new class AntennaModel provides an API for modeling the radiation pattern of antennas.
  1216 </li>
  1217 <li>The new buildings module introduces an API (classes, helpers, etc)
  1218   to model the presence of buildings in a wireless network topology. 
  1219 </li>
  1220 <li>The LENA project's implementation of the LTE Mac Scheduler Interface Specification
  1221    standardized by the Small Cell Forum (formerly Femto Forum) is now available for
  1222   use with the LTE module.
  1223 </li>
  1224 </ul>
  1225 
  1226 <h2>Changes to existing API:</h2>
  1227 <ul>
  1228 <li> The Ipv6RawSocketImpl "IcmpFilter" attribute has been removed. Six 
  1229 new member functions have been added to enable the same functionality.
  1230 </li>
  1231 <li> IPv6 support for TCP and UDP has been implemented.  Socket functions
  1232 that take an address [e.g. Send (), Connect (), Bind ()] can accept an
  1233 ns3::Ipv6Address or a ns3::Address in addition to taking an ns3::Ipv4Address.
  1234 (Note that the ns3::Address must contain a ns3::Ipv6Address or a ns3::Ipv4Address,
  1235 otherwise these functions will return an error).
  1236 Internally, the socket now stores the remote address as a type "ns3::Address"
  1237 instead of a type "ns3::Ipv4Address".  The IPv6 Routing Header extension is not
  1238 currently supported in ns3 and will not be reflected in the TCP and UDP checksum
  1239 calculations per RFC 2460.  Also note that UDP checksums for IPv6 packets are
  1240 required per RFC, but remain optional and disabled by default in ns3 (in the
  1241 interest of performance).
  1242 </li>
  1243 <li>
  1244 When calling Bind () on a socket without an address, the behavior remains the
  1245 same: it will bind to the IPv4 "any" address (0.0.0.0).  In order to Bind () to
  1246 the IPv6 "any" address in a similar fashion, use "Bind6 ()".
  1247 </li>
  1248 <li>
  1249 The prototype for the RxCallback function in the Ipv6EndPoint was changed.
  1250 It now includes the destination IPv6 address of the end point which was
  1251 needed for TCP.  This lead to a small change in the UDP and ICMPv6 L4
  1252 protocols as well.
  1253 </li>
  1254 <li>
  1255 Ipv6RoutingHelper can now print the IPv6 Routing Tables at specific 
  1256 intervals or time. Exactly like Ipv4RoutingHelper do.
  1257 </li>
  1258 <li>
  1259 New "SendIcmpv6Redirect" attribute (and getter/setter functions) to 
  1260 Ipv6L3Protocol. The behavior is similar to Linux's conf "send_redirects", 
  1261 i.e., enable/disable the ICMPv6 Redirect sending.
  1262 </li>
  1263 <li> The SpectrumPhy abstract class now has a new method
  1264 <pre>virtual Ptr&#60;AntennaModel&#62; GetRxAntenna () = 0;</pre>
  1265 that all derived classes need to implement in order to integrate properly with the newly added antenna model. In addition, a new member variable "Ptr&#60;AntennaModel&#62; txAntenna" has been added to SpectrumSignalParameters in order to allow derived SpectrumPhy classes to provide information about the antenna model used for the transmission of a waveform.
  1266 </li>
  1267 <li> The Ns2CalendarScheduler event scheduler has been removed.
  1268 </li>
  1269 <li>
  1270 ErrorUnit enum has been moved into RateErrorModel class, and symbols EU_BIT, EU_BYTE and EU_PKT have been renamed to RateErrorModel::ERROR_UNIT_BIT, RateErrorModel::ERROR_UNIT_BYTE and RateErrorModel::ERROR_UNIT_PACKET. RateErrorModel class attribute "ErrorUnit" values have also been renamed for consistency, and are now "ERROR_UNIT_BIT", "ERROR_UNIT_BYTE", "ERROR_UNIT_PACKET".
  1271 </li>
  1272 <li>
  1273 QueueMode enum from DropTailQueue and RedQueue classes has been unified and moved to Queueu class. Symbols DropTailQueue::PACKETS and DropTailQueue::BYTES are now named Queue::QUEUE_MODE_PACKETS and DropTailQueue::QUEUE_MODE_BYTES. In addition, DropTailQueue and RedQueue class attributes "Mode" have been renamed for consistency from "Packets" and "Bytes" to "QUEUE_MODE_PACKETS" and "QUEUE_MODE_BYTES".
  1274 </li>
  1275 <li>
  1276 The API of the LTE module has undergone a significant redesign with
  1277 the merge of the code from the LENA project. The new API is not
  1278 backwards compatible with the previous version of the LTE module.
  1279 </li>
  1280 <li> The Ipv6AddressHelper API has been aligned with the Ipv4AddressHelper API. 
  1281 The helper can be set with a call to Ipv6AddressHelper::SetBase 
  1282 (Ipv6Address network, Ipv6Prefix prefix) instead of NewNetwork
  1283 (Ipv6Address network, Ipv6Prefix prefix).  A new NewAddress (void) method
  1284 has been added.  Typical usage will involve calls to SetBase (), NewNetwork (),
  1285 and NewAddress (), as in class Ipv4AddressHelper. 
  1286 </li>
  1287 </ul>
  1288 
  1289 <h2>Changes to build system:</h2>
  1290 <ul>
  1291 <li> The following files are removed:
  1292 <pre>
  1293   src/internet/model/ipv4-l4-protocol.cc
  1294   src/internet/model/ipv4-l4-protocol.h
  1295   src/internet/model/ipv6-l4-protocol.cc
  1296   src/internet/model/ipv6-l4-protocol.h
  1297 </pre>
  1298 and replaced with:
  1299 <pre>
  1300   src/internet/model/ip-l4-protocol.cc
  1301   src/internet/model/ip-l4-protocol.h
  1302 </pre>
  1303 </li>
  1304 </ul>
  1305 <h2>Changed behavior:</h2>
  1306 <ul>
  1307 <li> Dual-stacked IPv6 sockets are implemented.  An IPv6 socket can accept
  1308 an IPv4 connection, returning the senders address as an IPv4-mapped address
  1309 (IPV6_V6ONLY socket option is not implemented).
  1310 </li>
  1311 <li>
  1312 The following examples/application/helpers were modified to support IPv6:
  1313 <pre>
  1314 csma-layout/examples/csma-star [*]
  1315 netanim/examples/star-animation [*]
  1316 point-to-point-layout/model/point-to-point-star.cc
  1317 point-to-point-layout/model/point-to-point-grid.cc
  1318 point-to-point-layout/model/point-to-point-dumbbell.cc
  1319 examples/udp/udp-echo [*]
  1320 examples/udp-client-server/udp-client-server [*]
  1321 examples/udp-client-server/udp-trace-client-server [*]
  1322 applications/helper/udp-echo-helper
  1323 applications/model/udp-client
  1324 applications/model/udp-echo-client
  1325 applications/model/udp-echo-server
  1326 applications/model/udp-server
  1327 applications/model/udp-trace-client
  1328 
  1329 [*]  Added '--useIpv6' flag to switch between IPv4 and IPv6
  1330 </pre>
  1331 </li>
  1332 </ul>
  1333 
  1334 <hr>
  1335 <h1>Changes from ns-3.12 to ns-3.13</h1>
  1336 
  1337 <h2>Changes to build system:</h2>
  1338 <ul>
  1339 <li> The underlying version of waf used by ns-3 was upgraded to 1.6.7.  
  1340 This has a few changes for users and developers:
  1341 <ul>
  1342 <li> by default, "build" no longer has a subdirectory debug or optimized.  
  1343 To get different build directories for different build types, you can use 
  1344 the waf configure -o <argument> option, e.g.:
  1345 <pre>
  1346   ./waf configure -o shared
  1347   ./waf configure --enable-static -o static
  1348 </pre>
  1349 </li>
  1350 <li> (for developers) the ns3headers taskgen needs to be created with a 
  1351 features parameter name:
  1352 <pre>
  1353   -  headers = bld.new_task_gen('ns3header')
  1354   +  headers = bld.new_task_gen(features=['ns3header'])
  1355 </pre>
  1356 <li> no longer need to edit src/wscript to add a module, just create your 
  1357 module directory inside src and ns-3 will pick it up
  1358 <li> In WAF 1.6, adding -Dxxx options is done via the DEFINES env. var.
  1359 instead of CXXDEFINES
  1360 <li> waf env values are always lists now, e.g. env['PYTHON'] returns
  1361 ['/usr/bin/python'], so you may need to add [0] to the value in some places
  1362 </ul> 
  1363 </ul>
  1364 
  1365 <h2>New API:</h2>
  1366 <ul>
  1367 <li> In the mobility module, there is a new MobilityModel::GetRelativeSpeed() method returning the relative speed of two objects. </li>
  1368 <li> A new Ipv6AddressGenerator class was added to generate sequential
  1369 addresses from a provided base prefix and interfaceId.  It also will detect
  1370 duplicate address assigments. </li> 
  1371 </ul>
  1372 
  1373 <h2>Changes to existing API:</h2>
  1374 <ul>
  1375 <li> In the spectrum module, the parameters to SpectrumChannel::StartTx () and SpectrumPhy::StartRx () methods are now passed using the new struct SpectrumSignalParameters. This new struct supports inheritance, hence it allows technology-specific PHY implementations to provide technology-specific parameters in SpectrumChannel::StartTx() and SpectrumPhy::StartRx(), while at the same time keeping a set of technology-independent parameters common across all spectrum-enabled PHY implementations (i.e., the duration and the power spectral density which are needed for interference calculation). Additionally, the SpectrumType class has been removed, since now the type of a spectrum signal can be inferred by doing a dynamic cast on SpectrumSignalParameters. See the <A href="http://mailman.isi.edu/pipermail/ns-developers/2011-October/009495.html" >Spectrum API change discussion on ns-developers</A> for the motivation behind this API change.
  1376 </li>
  1377 
  1378 <li> The WifiPhyStandard enumerators for specifying half- and quarter-channel 
  1379 width standards has had a change in capitalization:
  1380 <ul>
  1381 <li> WIFI_PHY_STANDARD_80211_10Mhz was changed to WIFI_PHY_STANDARD_80211_10MHZ
  1382 <li> WIFI_PHY_STANDARD_80211_5Mhz was changed to WIFI_PHY_STANDARD_80211_5MHZ
  1383 </ul>
  1384 <li> In the SpectrumPhy base class, the methods to get/set the
  1385   MobilityModel and the NetDevice were previously working with
  1386   opaque Ptr&#60;Object&#62;. Now all these methods have been
  1387   changed so that they work with Ptr&#60;NetDevice&#62;
  1388   and Ptr&#60;MobilityModel&#62; as appropriate. See <A href="https://www.nsnam.org/bugzilla/show_bug.cgi?id=1271">Bug 1271</A> on
  1389   bugzilla for the motivation.
  1390 </li>
  1391 </ul>
  1392 
  1393 <h2>Changed behavior:</h2>
  1394 <ul>
  1395 <li> TCP bug fixes
  1396 <ul> 
  1397 <li> Connection retries count is a separate variable with the retries limit, so cloned sockets can reset the count
  1398 <li> Fix bug on RTO that may halt the data flow
  1399 <li> Make TCP endpoints always holds the accurate address:port info
  1400 <li> RST packet is sent on closed sockets
  1401 <li> Fix congestion window sizing problem upon partial ACK in TcpNewReno
  1402 <li> Acknowledgement is sent, rather than staying silent, upon arrival of unacceptable packets
  1403 <li> Advance TcpSocketBase::m_nextTxSequence after RTO
  1404 </ul>
  1405 <li> TCP enhancements
  1406 <ul>
  1407 <li> Latest RTT value now stored in variable TcpSocketBase::m_lastRtt
  1408 <li> The list variable TcpL4Protocol::m_sockets now always holds all the created, running TcpSocketBase objects
  1409 <li> Maximum announced window size now an attribute, ns3::TcpSocketBase::MaxWindowSize
  1410 <li> TcpHeader now recognizes ECE and CWR flags (c.f. RFC3168)
  1411 <li> Added TCP option handling call in TcpSocketBase for future extension
  1412 <li> Data out of range (i.e. outsize acceptable range of receive window) now computed on bytes, not packets
  1413 <li> TCP moves from time-wait state to closed state after twice the time specified by attribute ns3:TcpSocketBase::MaxSegLifeTime
  1414 <li> TcpNewReno supports limited transmit (RFC3042) if asserting boolean attribute ns3::TcpNewReno::LimitedTransmit
  1415 <li> Nagle's algorithm supported. Default off, turn on by calling TcpSocket::SetTcpNoDelay(true)
  1416 </ul>
  1417 </ul>
  1418 
  1419 <hr>
  1420 <h1>Changes from ns-3.11 to ns-3.12</h1>
  1421 
  1422 <h2>Changes to build system:</h2>
  1423 <ul>
  1424 </ul>
  1425 
  1426 <h2>New API:</h2>
  1427 <ul>
  1428 <li> New method, RegularWifiMac::SetPromisc (void), to set the interface
  1429 to promiscuous mode.
  1430 </ul>
  1431 
  1432 <h2>Changes to existing API:</h2>
  1433 <ul>
  1434 <li> The spelling of the attribute 'IntialCellVoltage' from LiIonEnergySource 
  1435 was corrected to 'InitialCellVoltage'; this will affect existing users who 
  1436 were using the attribute with the misspelling.
  1437 <li> Two trace sources in class WifiPhy have had their names changed:
  1438 <ul> 
  1439 <li> 'PromiscSnifferRx' is now 'MonitorSnifferRx'
  1440 <li> 'PromiscSnifferTx' is now 'MonitorSnifferTx'
  1441 </ul>
  1442 </ul>
  1443 
  1444 <h2>Changed behavior:</h2>
  1445 <ul>
  1446 <li> IPv4 fragmentation is now supported.
  1447 </ul>
  1448 
  1449 <hr>
  1450 <h1>Changes from ns-3.10 to ns-3.11</h1>
  1451 
  1452 <h2>Changes to build system:</h2>
  1453 <ul>
  1454 <li><b>Examples and tests are no longer built by default in ns-3</b>
  1455 <p>
  1456 You can now make examples and tests be built in ns-3 in two ways.
  1457 <ol>
  1458 <li> Using build.py when ns-3 is built for the first time:
  1459 <pre>
  1460     ./build.py --enable-examples --enable-tests
  1461 </pre>
  1462 <li> Using waf once ns-3 has been built:
  1463 <pre>
  1464     ./waf configure --enable-examples --enable-tests
  1465 </pre>
  1466 </ol>
  1467 </p></li>
  1468 <li><b> Subsets of modules can be enabled using the ns-3 configuration file</b>
  1469 <p>A new configuration file, .ns3rc, has been added to ns-3 that
  1470 specifies the modules that should be enabled during the ns-3 build.
  1471 See the documentation for details.
  1472 </p></li>
  1473 </ul>
  1474 
  1475 <h2>New API:</h2>
  1476 <ul>
  1477 <li><b>int64x64_t</b>
  1478 <p>The <b>int64x64_t</b> type implements all the C++ arithmetic operators to behave like one of the
  1479 C++ native types. It is a 64.64 integer type which means that it is a 128bit integer type with
  1480 64 bits of fractional precision. The existing <b>Time</b> type is now automatically convertible to
  1481 <b>int64x64_t</b> to allow arbitrarily complex arithmetic operations on the content of <b>Time</b>
  1482 objects. The implementation of <b>int64x64_t</b> is based on the previously-existing
  1483 <b>HighPrecision</b> type and supercedes it.
  1484 </p></li>
  1485 </ul>
  1486 
  1487 <h2>Changes to existing API:</h2>
  1488 <ul>
  1489 <li><b>Wifi TX duration calculation moved from InterferenceHelper to WifiPhy</b>
  1490 <p>The following static methods have been moved from the InterferenceHelper class to the WifiPhy class:
  1491    <pre>
  1492 static Time CalculateTxDuration (uint32_t size, WifiMode payloadMode, enum WifiPreamble preamble);
  1493 static WifiMode GetPlcpHeaderMode (WifiMode payloadMode, WifiPreamble preamble);
  1494 static uint32_t GetPlcpHeaderDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble);
  1495 static uint32_t GetPlcpPreambleDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble);
  1496 static uint32_t GetPayloadDurationMicroSeconds (uint32_t size, WifiMode payloadMode);
  1497 </pre>
  1498 </p></li>
  1499 <li><b>Test cases no longer return a boolean value</b>
  1500 <p>Unit test case DoRun() functions no longer return a bool value.  Now, they don't return a value at all.  The motivation for this change was to disallow users from merely returning "true" from a test case to force an error to be recorded.  Instead, test case macros should be used.
  1501 </p></li>
  1502 <li><b>PhyMac renamed to GenericPhy</b>
  1503 <p>The PhyMac interface previously defined in phy-mac.h has been
  1504   renamed to GenericPhy interface and moved to a new file
  1505   generic-phy.h. The related variables and methods have been renamed accordingly. 
  1506 </p></li>
  1507 <li><b>Scalar</b>
  1508 <p>The Scalar type has been removed. Typical code such as:
  1509 <pre>
  1510 Time tmp = ...;
  1511 Time result = tmp * Scalar (5);
  1512 </pre>
  1513 Can now be rewritten as:
  1514 <pre>
  1515 Time tmp = ...;
  1516 Time result = Time (tmp * 5);
  1517 </pre>
  1518 </p>
  1519 </li>
  1520 <li><b>Multicast GetOutputTtl() commands</b>
  1521 <p> As part of bug 1047 rework to enable multicast routes on nodes with
  1522 more than 16 interfaces, the methods Ipv4MulticastRoute::GetOutputTtl () 
  1523 and Ipv6MulticastRoute::GetOutputTtl () have been modified to return
  1524 a std::map of interface IDs and TTLs for the route.
  1525 </p>
  1526 </li>
  1527 </ul>
  1528 
  1529 <h2>Changed behavior:</h2>
  1530 <ul>
  1531   <li> If the data inside the TCP buffer is less than the available window, TCP tries to ask for more data to the application, in the hope of filling the usable transmission window. In some cases, this change allows sending bigger packets than the previous versions, optimizing the transmission.</li>
  1532   <li> In TCP, the ACK is now processed before invoking any routine that deals with the segment sending, except in case of retransmissions.</li>
  1533 </ul>
  1534 
  1535 <hr>
  1536 <h1>Changes from ns-3.9 to ns-3.10</h1>
  1537 
  1538 <h2>Changes to build system:</h2>
  1539 <ul>
  1540 <li><b>Regression tests are no longer run using waf</b>
  1541 <p>All regression testing is now being done in test.py.  As a result, a 
  1542 separate reference trace repository is no longer needed to perform 
  1543 regression tests.  Tests that require comparison against known good traces
  1544 can still be run from test.py.  The --regression option for waf has been
  1545 removed.  However, the "-r" option to download.py has been kept to 
  1546 allow users to fetch older revisions of ns-3 that contain these traces.
  1547 </p>
  1548 <li><b>Documentation converted to Sphinx</b>
  1549 <p> Project documentation (manual, tutorial, and testing) have been
  1550 converted to Sphinx from the GNU Texinfo markup format.</p>
  1551 </ul>
  1552 
  1553 <h2>New API:</h2>
  1554 <ul>
  1555 <li><b>Pyviz visualizer</b>  
  1556 <p>A Python-based visualizer called pyviz is now integrated with ns-3.
  1557 For Python simulations, there is an API to start the visualizer.  You
  1558 have to import the visualizer module, and call visualizer.start()
  1559 instead of ns3.Simulator.Run().  For C++ simulations, there is no API.
  1560 For C++ simulations (but also works for Python ones) you need to set
  1561 the GlobalValue SimulatorImplementationType to
  1562 "ns3::VisualSimulatorImpl".  This can be set from the command-line,
  1563 for example (add the
  1564 <tt>--SimulatorImplementationType=ns3::VisualSimulatorImpl</tt>
  1565 option), or via the waf option <tt>--visualizer</tt>, in addition to
  1566 the usual <tt>--run</tt> option to run programs.
  1567 </p></li>
  1568 
  1569 <li><b>WaypointMobility attributes</b>
  1570 <p>Two attributes were added to WaypointMobility model:  LazyNotify and
  1571 InitialPositionIs Waypoint.  See RELEASE_NOTES for details.  </p> </li>
  1572 
  1573 <li><b>802.11g rates for ERP-OFDM added</b>
  1574 <p>New WifiModes of the form ErpOfdmRatexxMbps, where xx is the rate
  1575 in Mbps (6, 9, 12, 18, 24, 36, 48, 54), are available for 802.11g.  
  1576 More details are in the RELEASE_NOTES.  </p> </li>
  1577 
  1578 <li><b>Socket::GetSocketType ()</b>
  1579 <p>This is analogous to getsockopt(SO_TYPE). ipv4-raw-socket, ipv6-raw-socket,
  1580   and packet-socket return NS3_SOCK_RAW. tcp-socket and nsc-tcp-socket return
  1581   NS3_SOCK_STREAM. udp-socket returns NS3_SOCK_DGRAM.</p></li>
  1582 
  1583 <li><b>BulkSendApplication</b>
  1584 <p>Sends data as fast as possible up to MaxBytes or unlimited if MaxBytes is 
  1585 zero.  Think OnOff, but without the "off" and without the variable data rate. 
  1586 This application only works with NS3_SOCK_STREAM and NS3_SOCK_SEQPACKET sockets, 
  1587 for example TCP sockets and not UDP sockets. A helper class exists to 
  1588 facilitate creating BulkSendApplications. The API for the helper class 
  1589 is similar to existing application helper classes, for example, OnOff.
  1590 </p></li>
  1591 
  1592 <li><b>Rakhmatov Vrudhula non-linear battery model</b>
  1593 <p>New class and helper for this battery model. </p></li>
  1594 
  1595 <li><b>Print IPv4 routing tables</b>
  1596 <p>New class methods and helpers for printing IPv4 routing tables
  1597 to an output stream. </p></li>
  1598 
  1599 <li><b>Destination-Sequenced Distance Vector (DSDV) routing protocol</b>
  1600 <p>Derives from Ipv4RoutingProtocol and contains a DsdvHelper class. </p></li>
  1601 
  1602 <li><b>3GPP Long Term Evolution (LTE) models</b>
  1603 <p>More details are in the RELEASE_NOTES. </p></li>
  1604 
  1605 </ul>
  1606 
  1607 <h2>Changes to existing API:</h2>
  1608 <ul>
  1609 <li><b>Consolidation of Wi-Fi MAC high functionality</b>
  1610 <p>Wi-Fi MAC high classes have been reorganised in attempt to
  1611 consolidate shared functionality into a single class. This new class
  1612 is RegularWifiMac, and it derives from the abstract WifiMac, and is
  1613 parent of AdhocWifiMac, StaWifiMac, ApWifiMac, and
  1614 MeshWifiInterfaceMac. The QoS and non-QoS class variants are no
  1615 longer, with a RegularWifiMac attribute "QosSupported" allowing
  1616 selection between these two modes of operation. QosWifiMacHelper and
  1617 NqosWifiMacHelper continue to work as previously, with a
  1618 behind-the-scenes manipulation of the 'afore-mentioned attribute.
  1619 </p></li>
  1620 
  1621 <li><b>New TCP architecture</b>
  1622 <p>TcpSocketImpl was replaced by a new base class TcpSocketBase and
  1623 several subclasses implementing different congestion control.  From 
  1624 a user-level API perspective, the main change is that a new attribute
  1625 "SocketType" is available in TcpL4Protocol, to which a TypeIdValue
  1626 of a specific Tcp variant can be passed.  In the same class, the attribute 
  1627 "RttEstimatorFactory" was also renamed "RttEstimatorType" since it now
  1628 takes a TypeIdValue instead of an ObjectFactoryValue.  In most cases, 
  1629 however, no change to existing user programs should be needed.
  1630 </p></li>
  1631 </ul>
  1632 
  1633 <h2>Changed behavior:</h2>
  1634 <ul>
  1635 <li><b>EmuNetDevice uses DIX instead of LLC encapsulation by default</b>
  1636 <p>bug 984 in ns-3 tracker:  real devices don't usually understand LLC/SNAP
  1637 so the default of DIX makes more sense.
  1638 </p></li>
  1639 <li><b>TCP defaults to NewReno congestion control</b>
  1640 <p>As part of the TCP socket refactoring, a new TCP implementation provides
  1641 slightly different behavior than the previous TcpSocketImpl that provided
  1642 only fast retransmit.  The default behavior now is NewReno which provides
  1643 fast retransmit and fast recovery with window inflation during recovery.
  1644 </p></li>
  1645 </ul>
  1646 
  1647 <hr>
  1648 <h1>Changes from ns-3.8 to ns-3.9</h1>
  1649 
  1650 <h2>Changes to build system:</h2>
  1651 
  1652 <h2>New API:</h2>
  1653 <ul>
  1654 <li><b>Wifi set block ack threshold:</b> Two methods for setting block ack
  1655 parameters for a specific access class: 
  1656 <pre>
  1657 void QosWifiMacHelper::SetBlockAckThresholdForAc (enum AccessClass accessClass, uint8_t threshold);
  1658 void QosWifiMacHelper::SetBlockAckInactivityTimeoutForAc (enum AccessClass accessClass, uint16_t timeout);
  1659 </pre>
  1660 </li>
  1661 <li><b>Receive List Error Model:</b>  Another basic error model that allows
  1662 the user to specify a list of received packets that should be errored.  The
  1663 list corresponds not to the packet UID but to the sequence of received
  1664 packets as observed by the error model.   See src/common/error-model.h
  1665 </li>
  1666 <li><b>Respond to interface events:</b> New attribute for Ipv4GlobalRouting,
  1667 "RespondToInterfaceEvents", which when enabled, will cause global routes
  1668 to be recomputed upon any interface or address notification event from IPv4.
  1669 </li>
  1670 <li><b>Generic sequence number:</b> New generic sequence number class to 
  1671 easily handle comparison, subtraction, etc. for sequence numbers.  
  1672 To use it you need to supply two fundamental types as template parameters: 
  1673 NUMERIC_TYPE and SIGNED_TYPE.  For instance, <tt>SequenceNumber&lt;uint32_t, int32_t&gt;</tt> 
  1674 gives you a 32-bit sequence number, while <tt>SequenceNumber&lt;uint16_t, int16_t&gt;</tt> 
  1675 is a 16-bit one.  For your convenience, these are typedef'ed as 
  1676 <tt>SequenceNumber32</tt> and <tt>SequenceNumber16</tt>, respectively.
  1677 </li>
  1678 
  1679 <li><b>Broadcast socket option:</b> New Socket
  1680 methods <tt>SetAllowBroadcast</tt> and <tt>GetAllowBroadcast</tt> add
  1681 to NS-3 <tt>Socket</tt>'s the equivalent to the POSIX SO_BROADCAST
  1682 socket option (setsockopt/getsockopt).  Starting from this NS-3
  1683 version, IPv4 sockets do not allow us to send packets to broadcast
  1684 destinations by default; SetAllowBroadcast must be called beforehand
  1685 if we wish to send broadcast packets.
  1686 </li>
  1687 
  1688 <li><b>Deliver of packet ancillary information to sockets:</b> A method to deliver ancillary information 
  1689 to the socket interface (fixed in bug 671):  <pre>void Socket::SetRecvPktInfo (bool flag);</pre>
  1690 
  1691 </ul>
  1692 
  1693 <h2>Changes to existing API:</h2>
  1694 
  1695 <ul>
  1696 <li><b>Changes to construction and naming of Wi-Fi transmit rates:</b>
  1697 A reorganisation of the construction of Wi-Fi transmit rates has been
  1698 undertaken with the aim of simplifying the task of supporting further
  1699 IEEE 802.11 PHYs. This work has been completed under the auspices of
  1700 Bug 871.
  1701 
  1702 From the viewpoint of simulation scripts not part of the ns-3
  1703 distribution, the key change is that WifiMode names of the form
  1704 wifi<em>x</em>-<em>n</em>mbs are now invalid. Names now take the
  1705 form <em>Cccc</em>Rate<em>n</em>Mbps[BW<em>b</em>MHz],
  1706 where <em>n</em> is the root bitrate in megabits-per-second as before
  1707 (with only significant figures included, and an underscore replacing
  1708 any decimal point), and <em>Cccc</em> is a representation of the
  1709 Modulation Class as defined in Table 9-2 of IEEE
  1710 Std. 802.11-2007. Currently-supported options for <em>Cccc</em>
  1711 are <em>Ofdm</em> and <em>Dsss</em>. For modulation classes where
  1712 optional reduced-bandwidth transmission is possible, this is captured
  1713 in the final part of the form above, with <em>b</em> specifying the
  1714 nominal signal bandwidth in megahertz. </li>
  1715 
  1716 <li><b>Consolidation of classes support Wi-Fi Information Elements:</b>
  1717 When the <em>mesh</em> module was introduced it added a class
  1718 hierarchy for modelling of the various Information Elements that were
  1719 required. In this release, this class hierarchy has extended by moving
  1720 the base classes (WifiInformationElement and
  1721 WifiInformationElementVector) into the <em>wifi</em> module. This
  1722 change is intended to ease the addition of support for modelling of
  1723 further Wi-Fi functionality. </li>
  1724 
  1725 <li><b>Changed for {Ipv4,Ipv6}PacketInfoTag delivery:</b> In order to
  1726 deliver ancillary information to the socket interface (fixed in bug 671),
  1727 <em>Ipv4PacketInfoTag</em> and <em>Ipv6PacketInfoTag</em> are implemented. 
  1728 For the delivery of this information, the following changes are made into 
  1729 existing class.
  1730 
  1731 In Ipv4EndPoint class,
  1732 <pre>
  1733 -  void SetRxCallback (Callback&lt;void,Ptr&lt;Packet&gt;, Ipv4Address, Ipv4Address, uint16_t&gt; callback);
  1734 +  void SetRxCallback (Callback&lt;void,Ptr&lt;Packet&gt;, Ipv4Header, uint16_t, Ptr&lt;Ipv4Interface&gt; &gt; callback);
  1735 
  1736 -  void ForwardUp (Ptr&lt;Packet&gt; p, Ipv4Address saddr, Ipv4Address daddr, uint16_t sport);
  1737 +  void ForwardUp (Ptr&lt;Packet&gt; p, const Ipv4Header& header, uint16_t sport, 
  1738 +                  Ptr&lt;Ipv4Interface&gt; incomingInterface);
  1739 </pre>
  1740 In Ipv4L4Protocol class,
  1741 <pre>
  1742    virtual enum RxStatus Receive(Ptr&lt;Packet&gt; p, 
  1743 -                                Ipv4Address const &source,
  1744 -                                Ipv4Address const &destination,
  1745 +                                Ipv4Header const &header,
  1746                                  Ptr&lt;Ipv4Interface&gt; incomingInterface) = 0;
  1747 </pre>
  1748 <pre>
  1749 -Ipv4RawSocketImpl::ForwardUp (Ptr&lt;const Packet&gt; p, Ipv4Header ipHeader, Ptr&lt;NetDevice&gt; device)
  1750 +Ipv4RawSocketImpl::ForwardUp (Ptr&lt;const Packet&gt; p, Ipv4Header ipHeader, Ptr&lt;Ipv4Interface&gt; incomingInterface)
  1751 
  1752 -NscTcpSocketImpl::ForwardUp (Ptr&lt;Packet&gt; packet, Ipv4Address saddr, Ipv4Address daddr, uint16_t port)
  1753 +NscTcpSocketImpl::ForwardUp (Ptr&lt;Packet&gt; packet, Ipv4Header header, uint16_t port,
  1754 +                             Ptr&lt;Ipv4Interface&gt; incomingInterface)
  1755 
  1756 -TcpSocketImpl::ForwardUp (Ptr&lt;Packet&gt; packet, Ipv4Address saddr, Ipv4Address daddr, uint16_t port)
  1757 +TcpSocketImpl::ForwardUp (Ptr&lt;Packet&gt; packet, Ipv4Header header, uint16_t port,
  1758 +                          Ptr&lt;Ipv4Interface&gt; incomingInterface)
  1759 
  1760 -UdpSocketImpl::ForwardUp (Ptr&lt;Packet&gt; packet, Ipv4Address saddr, Ipv4Address daddr, uint16_t port)
  1761 +UdpSocketImpl::ForwardUp (Ptr&lt;Packet&gt; packet, Ipv4Header header, uint16_t port,
  1762 +                          Ptr&lt;Ipv4Interface&gt; incomingInterface)
  1763 
  1764 </pre>
  1765   
  1766 </li>
  1767 <li>The method OutputStreamWrapper::SetStream (std::ostream *ostream) was removed.</li>
  1768 )
  1769 </ul>
  1770 
  1771 <h2>Changed behavior:</h2>
  1772 <ul>
  1773 <li><b>Queue trace behavior during Enqueue changed:</b> The behavior of the
  1774 Enqueue trace source has been changed to be more intuitive and to agree with
  1775 documentation.  Enqueue and Drop events in src/node/queue.cc are now mutually
  1776 exclusive.  In the past, the meaning of an Enqueue event was that the Queue
  1777 Enqueue operation was being attempted; and this could be followed by a Drop
  1778 event if the Queue was full.  The new behavior is such that a packet is either
  1779 Enqueue'd successfully or Drop'ped.
  1780 
  1781 <li><b>Drop trace logged for Ipv4/6 forwarding failure:</b> Fixed bug 861; this 
  1782 will add ascii traces (drops) in Ipv4 and Ipv6 traces for forwarding failures
  1783 
  1784 <li><b>Changed default WiFi error rate model for OFDM modulation types:</b> 
  1785 Adopted more conservative ErrorRateModel for OFDM modulation types (a/g).
  1786 This will require 4 to 5 more dB of received power to get similar results
  1787 as before, so users may observe a reduced WiFi range when using the defaults.
  1788 See tracker issue 944 for more details.
  1789 </ul>
  1790 
  1791 <hr>
  1792 <h1>Changes from ns-3.7 to ns-3.8</h1>
  1793 
  1794 <h2>Changes to build system:</h2>
  1795 
  1796 <h2>New API:</h2>
  1797 
  1798 <ul>
  1799 <li><b>Matrix propagation loss model:</b> This radio propagation model uses a two-dimensional matrix
  1800 of path loss indexed by source and destination nodes.
  1801 
  1802 <li><b>WiMAX net device</b>: The developed WiMAX model attempts to provide an accurate MAC and
  1803 PHY level implementation of the 802.16 specification with the Point-to-Multipoint (PMP) mode and the WirelessMAN-OFDM 
  1804 PHY layer. By adding WimaxNetDevice objects to ns-3 nodes, one can create models of
  1805 802.16-based networks. The source code for the WiMAX models lives in the directory src/devices/wimax.
  1806 The model is mainly composed of three layers:
  1807 <ul>
  1808 <li>The convergence sublayer (CS)
  1809 <li>The MAC Common Part Sublayer (MAC-CPS)
  1810 <li>The Physical layer
  1811 </ul>
  1812 The main way that users who write simulation scripts will typically
  1813 interact with the Wimax models is through the helper API and through
  1814 the publicly visible attributes of the model.
  1815 The helper API is defined in src/helper/wimax-helper.{cc,h}.
  1816 Three examples containing some code that shows how to setup a 802.16 network are located under examples/wimax/ 
  1817 
  1818 <li><b>MPI Interface for distributed simulation:</b> Enables access
  1819 to necessary MPI information such as MPI rank and size.
  1820 
  1821 <li><b>Point-to-point remote channel:</b> Enables point-to-point 
  1822 connection between net-devices on different simulators, for use 
  1823 with distributed simulation.
  1824 
  1825 <li><b>GetSystemId in simulator:</b> For use with distributed 
  1826 simulation, GetSystemId returns zero by non-distributed 
  1827 simulators.  For the distributed simulator, it returns the 
  1828 MPI rank.
  1829 
  1830 <li><b>Enhancements to src/core/random-variable.cc/h:</b> New Zeta random variable generator. The Zeta random 
  1831 distribution is tightly related to the Zipf distribution (already in ns-3.7). See the documentation, 
  1832 especially because sometimes the Zeta distribution is called Zipf and viceversa. Here we conform to the 
  1833 Wikipedia naming convention, i.e., Zipf is bounded while Zeta isn't. 
  1834 
  1835 <li><b>Two-ray ground propagation loss model:</b> Calculates the crossover distance under which Friis is used. The antenna 
  1836 height is set to the nodes z coordinate, but can be added to using the model parameter SetHeightAboveZ, which 
  1837 will affect ALL stations
  1838 
  1839 <li><b>Pareto random variable</b> has two new constructors to specify scale and shape:
  1840 <pre>
  1841 ParetoVariable (std::pair<double, double> params);
  1842 ParetoVariable (std::pair<double, double> params, double b);
  1843 </pre>
  1844 </ul>
  1845 
  1846 <h2>Changes to existing API:</h2>
  1847 <ul>
  1848 <li><b>Tracing Helpers</b>: The organization of helpers for both pcap and ascii
  1849 tracing, in devices and protocols, has been reworked.  Instead of each device 
  1850 and protocol helper re-implementing trace enable methods, classes have been 
  1851 developed to implement user-level tracing in a consistent way; and device and 
  1852 protocol helpers use those classes to provide tracing functionality.<br>
  1853 In addition to consistent operation across all helpers, the object name service
  1854 has been integrated into the trace file naming scheme.<br>
  1855 The internet stack helper has been extensively massaged to make it easier to 
  1856 manage traces originating from protocols.  It used to be the case that there 
  1857 was essentially no opportunity to filter tracing on interfaces, and resulting
  1858 trace file names collided with those created by devices.  File names are now
  1859 disambiguated and one can enable traces on a protocol/interface basis analogously
  1860 to the node/device granularity of device-based helpers.<br>
  1861 The primary user-visible results of this change are that trace-related functions
  1862 have been changed from static functions to method calls; and a new object has
  1863 been developed to hold streams for ascii traces.<br>
  1864 New functionality is present for ascii traces.  It is now possible to create
  1865 multiple ascii trace files automatically just as was possible for pcap trace 
  1866 files.<br>
  1867 The implementation of the helper code has been designed also to provide 
  1868 functionality to make it easier for sophisticated users to hook traces of 
  1869 various kinds and write results to (file) streams.
  1870 Before:
  1871 <pre>
  1872   CsmaHelper::EnablePcapAll ();
  1873 
  1874   std::ofstream ascii;
  1875   ascii.open ("csma-one-subnet.tr", std::ios_base::binary | std::ios_base::out);
  1876   CsmaHelper::EnableAsciiAll (ascii);
  1877 
  1878   InternetStackHelper::EnableAsciiAll (ascii);
  1879 </pre>
  1880 After:
  1881 <pre>
  1882   CsmaHelper csmaHelper;
  1883   InternetStackHelper stack;
  1884   csmaHelper.EnablePcapAll ();
  1885 
  1886   AsciiTraceHelper ascii;
  1887   csma.EnableAsciiAll (ascii.CreateFileStream ("csma-one-subnet.tr"));
  1888 
  1889   stack.EnableAsciiIpv4All (stream);
  1890 </pre>
  1891 
  1892 
  1893 <li><b>Serialization and Deserialization</b> in buffer, nix-vector, 
  1894 packet-metadata, and packet has been modified to use raw character 
  1895 buffers, rather than the Buffer class
  1896 <pre>
  1897 + uint32_t Buffer::GetSerializedSize (void) const;
  1898 + uint32_t Buffer::Serialize (uint8_t* buffer, uint32_t maxSize) const;
  1899 + uint32_t Buffer::Deserialize (uint8_t* buffer, uint32_t size); 
  1900 
  1901 - void NixVector::Serialize (Buffer::Iterator i, uint32_t size) const;
  1902 + uint32_t NixVector::Serialize (uint32_t* buffer, uint32_t maxSize) const;
  1903 - uint32_t NixVector::Deserialize (Buffer::Iterator i);
  1904 + uint32_t NixVector::Deserialize (uint32_t* buffer, uint32_t size);
  1905 
  1906 - void PacketMetadata::Serialize (Buffer::Iterator i, uint32_t size) const;
  1907 + uint32_t PacketMetadata::Serialize (uint8_t* buffer, uint32_t maxSize) const;
  1908 - uint32_t PacketMetadata::Deserialize (Buffer::Iterator i);
  1909 + uint32_t PacketMetadata::Deserialize (uint8_t* buffer, uint32_t size);
  1910 
  1911 + uint32_t Packet::GetSerializedSize (void) const;
  1912 - Buffer Packet::Serialize (void) const;
  1913 + uint32_t Packet::Serialize (uint8_t* buffer, uint32_t maxSize) const;
  1914 - void Packet::Deserialize (Buffer buffer);
  1915 + Packet::Packet (uint8_t const*buffer, uint32_t size, bool magic);
  1916 </pre>
  1917 <li><b>PacketMetadata uid</b> has been changed to a 64-bit value. The 
  1918 lower 32 bits give the uid, while the upper 32-bits give the MPI rank 
  1919 for distributed simulations. For non-distributed simulations, the 
  1920 upper 32 bits are simply zero.
  1921 <pre>
  1922 - inline PacketMetadata (uint32_t uid, uint32_t size);
  1923 + inline PacketMetadata (uint64_t uid, uint32_t size);
  1924 - uint32_t GetUid (void) const;
  1925 + uint64_t GetUid (void) const;
  1926 - PacketMetadata::PacketMetadata (uint32_t uid, uint32_t size);
  1927 + PacketMetadata::PacketMetadata (uint64_t uid, uint32_t size); 
  1928 
  1929 - uint32_t Packet::GetUid (void) const;
  1930 + uint64_t Packet::GetUid (void) const;
  1931 </pre>
  1932 
  1933 <li><b>Moved propagation models</b> from src/devices/wifi to src/common
  1934 
  1935 <li><b>Moved Mtu attribute from base class NetDevice</b> This attribute is
  1936 now found in all NetDevice subclasses.  
  1937 </ul>
  1938 
  1939 <h2>Changed behavior:</h2>
  1940 <ul>
  1941 
  1942 </ul>
  1943 
  1944 <hr>
  1945 <h1>Changes from ns-3.6 to ns-3.7</h1>
  1946 
  1947 
  1948 <h2>Changes to build system:</h2>
  1949 
  1950 <h2>New API:</h2>
  1951 
  1952 <ul>
  1953 <li><b>Equal-cost multipath for global routing:</b> Enables quagga's
  1954 equal cost multipath for Ipv4GlobalRouting, and adds an attribute that
  1955 can enable it with random packet distribution policy across equal cost routes.
  1956 <li><b>Binding sockets to devices:</b> A method analogous to a SO_BINDTODEVICE
  1957 socket option has been introduced to class Socket:  <pre>virtual void Socket::BindToNetDevice (Ptr&lt;NetDevice&gt; netdevice);</pre>
  1958 <li><b>Simulator event contexts</b>: The Simulator API now keeps track of a per-event
  1959 'context' (a 32bit integer which, by convention identifies a node by its id). Simulator::GetContext
  1960 returns the context of the currently-executing event while Simulator::ScheduleWithContext creates an
  1961 event with a context different from the execution context of the caller. This API is used
  1962 by the ns-3 logging system to report the execution context of each log line.
  1963 <li><b>Object::DoStart</b>: Users who need to complete their object setup at the start of a simulation
  1964 can override this virtual method, perform their adhoc setup, and then, must chain up to their parent.
  1965 <li><b>Ad hoc On-Demand Distance Vector (AODV)</b> routing model, 
  1966 <a href=http://www.ietf.org/rfc/rfc3561.txt>RFC 3561</a> </li>
  1967 <li><b>Ipv4::IsDestinationAddress (Ipv4Address address, uint32_t iif)</b> Method added to support checks of whether a destination address should be accepted 
  1968 as one of the host's own addresses.  RFC 1122 Strong/Weak end system behavior can be changed with a new attribute (WeakEsModel) in class Ipv4.  </li>
  1969 
  1970 <li><b>Net-anim interface</b>: Provides an interface to net-anim, a network animator for point-to-point 
  1971 links in ns-3.  The interface generates a custom trace file for use with the NetAnim program.</li>
  1972 
  1973 <li><b>Topology Helpers</b>: New topology helpers have been introduced including PointToPointStarHelper, 
  1974 PointToPointDumbbellHelper, PointToPointGridHelper, and CsmaStarHelper.</li>
  1975 
  1976 <li><b>IPv6 extensions support</b>: Provides API to add IPv6 extensions and options. Two examples (fragmentation
  1977 and loose routing) are available.</li>
  1978 </ul>
  1979 
  1980 <h2>Changes to existing API:</h2>
  1981 <ul>
  1982 <li><b>Ipv4RoutingProtocol::RouteOutput</b> no longer takes an outgoing 
  1983 interface index but instead takes an outgoing device pointer; this affects all
  1984 subclasses of Ipv4RoutingProtocol.
  1985 <pre>
  1986 -  virtual Ptr&lt;Ipv4Route&gt; RouteOutput (Ptr&lt;Packet&gt; p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr) = 0;
  1987 +  virtual Ptr&lt;Ipv4Route&gt; RouteOutput (Ptr&lt;Packet&gt; p, const Ipv4Header &header, Ptr&lt;NetDevice&gt; oif, Socket::SocketErrno &sockerr) = 0;
  1988 </pre>
  1989 <li><b>Ipv6RoutingProtocol::RouteOutput</b> no longer takes an outgoing 
  1990 interface index but instead takes an outgoing device pointer; this affects all
  1991 subclasses of Ipv6RoutingProtocol.
  1992 <pre>
  1993 -  virtual Ptr&lt;Ipv6Route&gt; RouteOutput (Ptr&lt;Packet&gt; p, const Ipv6Header &header, uint32_t oif, Socket::SocketErrno &sockerr) = 0;
  1994 +  virtual Ptr&lt;Ipv6Route&gt; RouteOutput (Ptr&lt;Packet&gt; p, const Ipv6Header &header, Ptr&lt;NetDevice&gt; oif, Socket::SocketErrno &sockerr) = 0;
  1995 </pre>
  1996 <li><b>Application::Start</b> and <b>Application::Stop</b> have been renamed to
  1997 <b>Application::SetStartTime</b> and <b>Application::SetStopTime</b>.
  1998 <li><b>Channel::Send</b>: this method does not really exist but each subclass of the Channel
  1999 base class must implement a similar method which sends a packet from a node to another node.
  2000 Users must now use Simulator::ScheduleWithContext instead of Simulator::Schedule to schedule
  2001 the reception event on a remote node.<br>
  2002 For example, before:
  2003 <pre>
  2004 void
  2005 SimpleChannel::Send (Ptr&lt;Packet&gt; p, uint16_t protocol, 
  2006          Mac48Address to, Mac48Address from,
  2007          Ptr&lt;SimpleNetDevice&gt; sender)
  2008 {
  2009   for (std::vector&lt;Ptr&lt;SimpleNetDevice&gt; &gt;::const_iterator i = m_devices.begin (); i != m_devices.end (); ++i)
  2010     {
  2011       Ptr&lt;SimpleNetDevice&gt; tmp = *i;
  2012       if (tmp == sender)
  2013   {
  2014     continue;
  2015   }
  2016       Simulator::ScheduleNow (&SimpleNetDevice::Receive, tmp, p->Copy (), protocol, to, from);
  2017     }
  2018 }
  2019 </pre>
  2020 After:
  2021 <pre>
  2022 void
  2023 SimpleChannel::Send (Ptr&lt;Packet&gt; p, uint16_t protocol, 
  2024          Mac48Address to, Mac48Address from,
  2025          Ptr&lt;SimpleNetDevice&gt; sender)
  2026 {
  2027   for (std::vector&lt;Ptr&lt;SimpleNetDevice&gt; &gt;::const_iterator i = m_devices.begin (); i != m_devices.end (); ++i)
  2028     {
  2029       Ptr&lt;SimpleNetDevice&gt; tmp = *i;
  2030       if (tmp == sender)
  2031   {
  2032     continue;
  2033   }
  2034       Simulator::ScheduleWithContext (tmp->GetNode ()->GetId (), Seconds (0),
  2035                                       &SimpleNetDevice::Receive, tmp, p->Copy (), protocol, to, from);
  2036     }
  2037 }
  2038 </pre>
  2039 
  2040 <li><b>Simulator::SetScheduler</b>: this method now takes an ObjectFactory
  2041 instead of an object pointer directly. Existing callers can trivially be
  2042 updated to use this new method.<br>
  2043 Before:
  2044 <pre>
  2045 Ptr&lt;Scheduler&gt; sched = CreateObject&lt;ListScheduler&gt; ();
  2046 Simulator::SetScheduler (sched);
  2047 </pre>
  2048 After:
  2049 <pre>
  2050 ObjectFactory sched;
  2051 sched.SetTypeId ("ns3::ListScheduler");
  2052 Simulator::SetScheduler (sched);
  2053 </pre>
  2054 
  2055 <li> Extensions to IPv4 <b>Ping</b> application: verbose output and the ability to configure different ping 
  2056 sizes and time intervals (via new attributes)
  2057 
  2058 <li><b>Topology Helpers</b>: Previously, topology helpers such as a point-to-point star existed in the 
  2059 PointToPointHelper class in the form of a method (ex: PointToPointHelper::InstallStar).  These topology 
  2060 helpers have been pulled out of the specific helper classes and created as separate classes.  Several 
  2061 different topology helper classes now exist including PointToPointStarHelper, PointToPointGridHelper, 
  2062 PointToPointDumbbellHelper, and CsmaStarHelper.  For example, a user wishes to create a 
  2063 point-to-point star network:<br>
  2064 Before:
  2065 <pre>
  2066 NodeContainer hubNode;
  2067 NodeContainer spokeNodes;
  2068 hubNode.Create (1);
  2069 Ptr&lt;Node&gt; hub = hubNode.Get (0);
  2070 spokeNodes.Create (nNodes - 1);
  2071 
  2072 PointToPointHelper pointToPoint;
  2073 pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
  2074 pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));
  2075 NetDeviceContainer hubDevices, spokeDevices;
  2076 pointToPoint.InstallStar (hubNode.Get (0), spokeNodes, hubDevices, spokeDevices);
  2077 </pre>
  2078 After:
  2079 <pre>
  2080 PointToPointHelper pointToPoint;
  2081 pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
  2082 pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));
  2083 PointToPointStarHelper star (nSpokes, pointToPoint);
  2084 </pre>
  2085 
  2086 </li>
  2087 
  2088 </ul>
  2089 
  2090 <h2>Changed behavior:</h2>
  2091 <ul>
  2092 <li> Changed default value of YansWifiPhy::EnergyDetectionThreshold from
  2093 -140.0 dBm to -96.0 dBm.  Changed default value of 
  2094 YansWifiPhy::CcaModelThreshold from -140.0 dBm to -99.0 dBm.  Rationale
  2095 can be found <a href="http://www.nsnam.org/bugzilla/show_bug.cgi?id=689"> 
  2096 here</a>.
  2097 </li>
  2098 <li> Default TTL of IPv4 broadcast datagrams changed from 1 to 64.</li>
  2099 <li> Changed DcfManager::UpdateBackoff (): using flooring instead of rounding in calculation of remaining slots. <a href="http://www.nsnam.org/bugzilla/show_bug.cgi?id=695">
  2100   See bug 695.</a></li>
  2101 </ul>
  2102 
  2103 
  2104 <hr>
  2105 <h1>Changes from ns-3.5 to ns-3.6</h1>
  2106 
  2107 <h2>Changes to build system:</h2>
  2108 <ul>
  2109 <li><b>A new test framework is provided with ns-3.6 that primarilay runs outside waf</b>
  2110 <p>"./waf check" now runs the new unit tests of the core part of ns-3.6.  
  2111 In order to run the complete test package, use "./test.py" which is 
  2112 documented in a new manual -- find it in ./doc/testing.  "./waf check"
  2113 no longer generates the introspected Doxygen.  Now use "./waf doxygen"
  2114 to do this and generate the Doxygen documentation in one step.
  2115 </p>
  2116 </ul>
  2117 
  2118 <h2>New API:</h2>
  2119 <ul>
  2120 <li><b>Longest prefix match, support for metrics, for Ipv4StaticRouting and Ipv6StaticRouting</b>
  2121 <p>When performing route lookup, first match for longest prefix, and then
  2122 based on metrics (default metric = 0).  If metrics are equal, most recent
  2123 addition is picked.  Extends API for support of metrics but preserves
  2124 backward compatibility.  One small change is that the default route
  2125 is no longer stored as index 0 route in the host route table so 
  2126 GetDefaultRoute () must be used.
  2127 </p>
  2128 </li>
  2129 <li><b>Route injection for global routing</b>
  2130 <p>Add ability to inject and withdraw routes to Ipv4GlobalRouting.  This
  2131 allows a user to insert a route and have it redistributed like an OSPF
  2132 external LSA to the rest of the topology.
  2133 </p>
  2134 </li>
  2135 
  2136 <li><b>Athstats</b>
  2137 <p>New classes AthstatsWifiTraceSink and AthstatsHelper.
  2138 </p>
  2139 </li>
  2140 <li><b>WifiRemoteStationManager </b>
  2141 <p>New trace sources exported by WifiRemoteStationManager: MacTxRtsFailed, MacTxDataFailed, MacTxFinalRtsFailed and MacTxFinalDataFailed.
  2142 </p>
  2143 </li>
  2144 
  2145 <li><b> IPv6 additions</b>
  2146 <p> Add an IPv6 protocol and ICMPv6 capability.
  2147 <ul>
  2148 <li> new classes Ipv6, Ipv6Interface, Ipv6L3Protocol, Ipv6L4Protocol
  2149 <li> Ipv6RawSocket (no UDP or TCP capability yet)
  2150 <li> a set of classes to implement Icmpv6, including neighbor discovery,
  2151 router solicitation, DAD
  2152 <li> new applications Ping6 and Radvd
  2153 <li> routing objects Ipv6Route and Ipv6MulticastRoute
  2154 <li> routing protocols Ipv6ListRouting and Ipv6StaticRouting
  2155 <li> examples: icmpv6-redirect.cc, ping6.cc, radvd.cc, radvd-two-prefix.cc, simple-routing-ping6.cc
  2156 </ul>
  2157 </p>
  2158 </li> 
  2159 
  2160 <li><b>Wireless Mesh Networking models</b>
  2161 <ul>
  2162 <p>
  2163 <li> General multi-interface mesh stack infrastructure (devices/mesh module).
  2164 <li> IEEE 802.11s (Draft 3.0) model including Peering Management Protocol and HWMP.
  2165 <li> Forwarding Layer for Meshing (FLAME) protocol.
  2166 </ul>
  2167 </p>
  2168 </li>
  2169 
  2170 <li><b>802.11 enhancements</b>
  2171 <p>
  2172 <ul>
  2173 <li> 10MHz and 5MHz channel width supported by 802.11a model (Ramon Bauza and Kirill Andreev).
  2174 </ul>
  2175 <ul>
  2176 <li> Channel switching support. YansWifiPhy can now switch among different channels (Ramon Bauza and Pavel Boyko).
  2177 </ul>
  2178 </p>
  2179 </li>
  2180 
  2181 <li><b> Nix-vector Routing</b>
  2182 <p> Add nix-vector routing protocol
  2183 <ul>
  2184 <li> new helper class Ipv4NixVectorHelper
  2185 </ul>
  2186 <ul>
  2187 <li> examples: nix-simple.cc, nms-p2p-nix.cc
  2188 </ul> 
  2189 </p>
  2190 </li>
  2191 
  2192 <li><b>New Test Framework</b>
  2193 <p> Add TestCase, TestSuite classes
  2194 <ul>
  2195 <li> examples: src/core/names-test-suite.cc, src/core/random-number-test-suite.cc, src/test/ns3tcp/ns3tcp-cwnd-test-suite.cc
  2196 </ul> 
  2197 </p>
  2198 </li>
  2199 
  2200 </ul>
  2201 
  2202 <h2>Changes to existing API:</h2>
  2203 <ul>
  2204 <li><b>InterferenceHelper</b>
  2205 <p>The method InterferenceHelper::CalculateTxDuration (uint32_t size, WifiMode payloadMode, WifiPreamble preamble) has been made static, so that the frame duration depends only on the characteristics of the frame (i.e., the function parameters) and not on the particular standard which is used by the receiving PHY. This makes it now possible to correctly calculate the duration of incoming frames in scenarios in which devices using different PHY configurations coexist in the same channel (e.g., a BSS using short preamble and another BSS using long preamble). </p>
  2206 <p> The following member methods have been added to InterferenceHelper:</p>
  2207 <pre>
  2208   static WifiMode GetPlcpHeaderMode (WifiMode, WifiPreamble);
  2209   static uint32_t GetPlcpHeaderDurationMicroSeconds (WifiMode, WifiPreamble);
  2210   static uint32_t GetPlcpPreambleDurationMicroSeconds (WifiMode, WifiPreamble);
  2211   static uint32_t GetPayloadDurationMicroSeconds (size, WifiMode); </pre>
  2212 <p> The following member methods have been removed from InterferenceHelper:</p>
  2213 <pre>
  2214   void Configure80211aParameters (void);
  2215   void Configure80211bParameters (void);
  2216   void Configure80211_10MhzParameters (void);
  2217   void Configure80211_5MhzParameters (void);</pre>
  2218 </li>
  2219 <li><b>WifiMode</b>
  2220 <p>WifiMode now has a WifiPhyStandard attribute which identifies the standard the WifiMode belongs to. To properly set this attribute when creating a new WifiMode, it is now required to explicitly pass a WifiPhyStandard parameter to all WifiModeFactory::CreateXXXX() methods. The WifiPhyStandard value of an existing WifiMode can be retrieved using the new method WifiMode::GetStandard().</p>
  2221 </li>
  2222 <li><b>NetDevice</b>
  2223 <p>In order to have multiple link change callback in NetDevice (i.e. to flush ARP and IPv6 neighbor discovery caches), the following member method has been renamed:</p>
  2224 <pre>
  2225 - virtual void SetLinkChangeCallback (Callback&lt;void&gt; callback);
  2226 + virtual void AddLinkChangeCallback (Callback&lt;void&gt; callback);</pre>
  2227 Now each NetDevice subclasses have a TracedCallback&lt;&gt; object (list of callbacks) instead of Callback&lt;void&gt; ones.
  2228 </li>
  2229 </ul>
  2230 
  2231 <hr>
  2232 <h1>Changes from ns-3.4 to ns-3.5</h1>
  2233 
  2234 <h2>Changes to build system:</h2>
  2235 <ul>
  2236 </ul>
  2237 
  2238 <h2>New API:</h2>
  2239 
  2240 <ul>
  2241 <li><b>YansWifiPhyHelper supporting radiotap and prism PCAP output</b>
  2242 <p>The newly supported pcap formats can be adopted by calling the following new method of YansWifiPhyHelper:</p>
  2243 <pre>
  2244  +  void SetPcapFormat (enum PcapFormat format);
  2245 </pre>
  2246 where format is one of PCAP_FORMAT_80211_RADIOTAP, PCAP_FORMAT_80211_PRISM or  PCAP_FORMAT_80211. By default, PCAP_FORMAT_80211 is used, so the default PCAP format is the same as before.</p>
  2247 </li>
  2248 
  2249 <li> <b>attributes for class Ipv4</b>
  2250 <p> class Ipv4 now contains attributes in ipv4.cc; the first one
  2251 is called "IpForward" that will enable/disable Ipv4 forwarding.  
  2252 </li>
  2253 
  2254 <li> <b>packet tags</b>
  2255 <p>class Packet now contains AddPacketTag, RemovePacketTag and PeekPacketTag 
  2256 which can be used to attach a tag to a packet, as opposed to the old 
  2257 AddTag method which attached a tag to a set of bytes. The main 
  2258 semantic difference is in how these tags behave in the presence of 
  2259 fragmentation and reassembly.
  2260 </li>
  2261 
  2262 </ul>
  2263 
  2264 <h2>Changes to existing API:</h2>
  2265 <ul>
  2266 
  2267 <li><b>Ipv4Interface::GetMtu () deleted</b>
  2268   <p>The Ipv4Interface API is private to internet-stack module; this method
  2269 was just a pass-through to GetDevice ()-&gt;GetMtu ().
  2270   </p>
  2271 </li>
  2272 
  2273 <li><b>GlobalRouteManager::PopulateRoutingTables () and RecomputeRoutingTables () are deprecated </b>
  2274   <p>This API has been moved to the helper API and the above functions will
  2275 be removed in ns-3.6.  The new API is:
  2276 <pre>
  2277 Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
  2278 Ipv4GlobalRoutingHelper::RecomputeRoutingTables ();
  2279 </pre>
  2280 Additionally, these low-level functions in GlobalRouteManager are now public,
  2281 allowing more API flexibility at the low level ns-3 API:
  2282 <pre>
  2283 GlobalRouteManager::DeleteGlobalRoutes ();
  2284 GlobalRouteManager::BuildGlobalRoutingDatabase ();
  2285 GlobalRouteManager::InitializeRoutes ();
  2286 </pre>
  2287   </p>
  2288 </li>
  2289 
  2290 <li><b>CalcChecksum attribute changes</b>
  2291   <p>Four IPv4 CalcChecksum attributes (which enable the computation of 
  2292 checksums that are disabled by default) have been collapsed into one global 
  2293 value in class Node.  These four calls: 
  2294 <pre>
  2295 Config::SetDefault ("ns3::Ipv4L3Protocol::CalcChecksum", BooleanValue (true)); 
  2296 Config::SetDefault ("ns3::Icmpv4L4Protocol::CalcChecksum", BooleanValue (true));
  2297 Config::SetDefault ("ns3::TcpL4Protocol::CalcChecksum", BooleanValue (true));
  2298 Config::SetDefault ("ns3::UdpL4Protocol::CalcChecksum", BooleanValue (true));
  2299 </pre>
  2300 are replaced by one call to:
  2301 <pre>
  2302 GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
  2303 </pre>
  2304   </p>
  2305 </li>
  2306 
  2307 <li><b>CreateObject changes</b>
  2308   <p>CreateObject is now able to construct objects with a non-default constructor.
  2309    If you used to pass attribute lists to CreateObject, you must now use CreateObjectWithAttributes.
  2310   </p>
  2311 </li>
  2312 
  2313 <li> <b>packet byte tags renaming</b>
  2314   <ul>
  2315   <li>Packet::AddTag to Packet::AddByteTag</li>
  2316   <li>Packet::FindFirstMatchingTag to Packet::FindFirstMatchingByteTag</li>
  2317   <li>Packet::RemoveAllTags to Packet::RemoveAllByteTags</li>
  2318   <li>Packet::PrintTags to Packet::PrintByteTags</li>
  2319   <li>Packet::GetTagIterator to Packet::GetByteTagIterator</li>
  2320   </ul>
  2321 </li>
  2322 
  2323 <li><b>YansWifiPhyHelper::EnablePcap* methods not static any more</b>
  2324 <p>To accommodate the possibility of configuring the PCAP format used for wifi promiscuous mode traces, several methods of YansWifiPhyHelper had to be made non-static:
  2325 <pre>
  2326 -  static void EnablePcap (std::string filename, uint32_t nodeid, uint32_t deviceid);
  2327 +         void EnablePcap (std::string filename, uint32_t nodeid, uint32_t deviceid);
  2328 -  static void EnablePcap (std::string filename, Ptr&lt;NetDevice&gt; nd);
  2329 +         void EnablePcap (std::string filename, Ptr&lt;NetDevice&gt; nd);
  2330 -  static void EnablePcap (std::string filename, std::string ndName);
  2331 +         void EnablePcap (std::string filename, std::string ndName);
  2332 -  static void EnablePcap (std::string filename, NetDeviceContainer d);
  2333 +         void EnablePcap (std::string filename, NetDeviceContainer d);
  2334 -  static void EnablePcap (std::string filename, NodeContainer n);
  2335 +         void EnablePcap (std::string filename, NodeContainer n);
  2336 -  static void EnablePcapAll (std::string filename);
  2337 +         void EnablePcapAll (std::string filename);
  2338 </pre>
  2339 </p>
  2340 </li>
  2341 
  2342 <li><b>Wifi Promisc Sniff interface modified </b>
  2343 <p> 
  2344 To accommodate support for the radiotap and prism headers in PCAP traces, the interface for promiscuos mode sniff in the wifi device was changed. The new implementation was heavily inspired by the way the madwifi driver handles monitor mode. A distinction between TX and RX events is introduced, to account for the fact that different information is to be put in the radiotap/prism header (e.g., RSSI and noise make sense only for RX packets). The following are the relevant modifications to the WifiPhy class:
  2345 <pre>
  2346 -  void NotifyPromiscSniff (Ptr&lt;const Packet&gt; packet);
  2347 +  void NotifyPromiscSniffRx (Ptr&lt;const Packet&gt; packet, uint16_t channelFreqMhz, uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm);
  2348 +  void NotifyPromiscSniffTx (Ptr&lt;const Packet&gt; packet, uint16_t channelFreqMhz, uint32_t rate, bool isShortPreamble);
  2349 -  TracedCallback&lt;Ptr&lt;const Packet&gt; &gt; m_phyPromiscSnifferTrace;
  2350 +  TracedCallback&lt;Ptr&lt;const Packet&gt;, uint16_t, uint32_t, bool, double, double&gt; m_phyPromiscSniffRxTrace;
  2351 +  TracedCallback&lt;Ptr&lt;const Packet&gt;, uint16_t, uint32_t, bool&gt; m_phyPromiscSniffTxTrace;
  2352 </pre>
  2353 The above mentioned callbacks are expected to be used to call the following method to write Wifi PCAP traces in promiscuous mode:
  2354 <pre>
  2355 +  void WriteWifiMonitorPacket(Ptr&lt;const Packet&gt; packet, uint16_t channelFreqMhz, uint32_t rate, bool isShortPreamble, bool isTx, double signalDbm, double noiseDbm);
  2356 </pre>
  2357 In the above method, the isTx parameter is to be used to differentiate between TX and RX packets. For an example of how to implement these callbacks, see the implementation of PcapSniffTxEvent and PcapSniffRxEvent in src/helper/yans-wifi-helper.cc
  2358 </p>
  2359 </li>
  2360 
  2361 <li><b> Routing decoupled from class Ipv4</b>
  2362 <p> All calls of the form "Ipv4::AddHostRouteTo ()" etc. (i.e. to 
  2363 add static routes, both unicast and multicast) have been moved to a new 
  2364 class Ipv4StaticRouting.  In addition, class Ipv4 now holds only
  2365 one possible routing protocol; the previous way to add routing protocols
  2366 (by ordered list of priority) has been moved to a new class Ipv4ListRouting.
  2367 Class Ipv4 has a new minimal routing API (just to set and get the routing
  2368 protocol):
  2369 <pre>
  2370 -  virtual void AddRoutingProtocol (Ptr&lt;Ipv4RoutingProtocol&gt; routingProtocol, int16_t priority) = 0;
  2371 +  virtual void SetRoutingProtocol (Ptr&lt;Ipv4RoutingProtocol&gt; routingProtocol) = 0;
  2372 +  virtual Ptr&lt;Ipv4RoutingProtocol&gt; GetRoutingProtocol (void) const = 0;
  2373 </pre>
  2374 </li>
  2375 
  2376 <li><b> class Ipv4RoutingProtocol is refactored</b>
  2377 <p> The abstract base class Ipv4RoutingProtocol has been refactored to
  2378 align with corresponding Linux Ipv4 routing architecture, and has been
  2379 moved from ipv4.h to a new file ipv4-routing-protocol.h.  The new
  2380 methods (RouteOutput () and RouteInput ()) are aligned with Linux 
  2381 ip_route_output() and ip_route_input().  However,
  2382 the general nature of these calls (synchronous routing lookup for
  2383 locally originated packets, and an asynchronous, callback-based lookup
  2384 for forwarded packets) is still the same.
  2385 <pre>
  2386 -  typedef Callback&lt;void, bool, const Ipv4Route&amp;, Ptr&lt;Packet&gt;, const Ipv4Header&amp;&gt; RouteReplyCallback;
  2387 +  typedef Callback&lt;void, Ptr&lt;Ipv4Route&gt;, Ptr&lt;const Packet&gt;, const Ipv4Header &amp;&gt; UnicastForwardCallback;
  2388 +  typedef Callback&lt;void, Ptr&lt;Ipv4MulticastRoute&gt;, Ptr&lt;const Packet&gt;, const Ipv4Header &amp;&gt; MulticastForwardCallback;
  2389 +  typedef Callback&lt;void, Ptr&lt;const Packet&gt;, const Ipv4Header &amp;, uint32_t &gt; LocalDeliverCallback;
  2390 +  typedef Callback&lt;void, Ptr&lt;const Packet&gt;, const Ipv4Header &amp;&gt; ErrorCallback;
  2391 -  virtual bool RequestInterface (Ipv4Address destination, uint32_t&amp; interface) = 0;
  2392 +  virtual Ptr&lt;Ipv4Route&gt; RouteOutput (Ptr&lt;Packet&gt; p, const Ipv4Header &amp;header, uint32_t oif, Socket::SocketErrno &amp;errno) = 0;
  2393 -  virtual bool RequestRoute (uint32_t interface,
  2394 -                            const Ipv4Header &amp;ipHeader,
  2395 -                            Ptr&lt;Packet&gt; packet,
  2396 -                            RouteReplyCallback routeReply) = 0;
  2397 +  virtual bool RouteInput  (Ptr&lt;const Packet&gt; p, const Ipv4Header &amp;header, Ptr&lt;const NetDevice&gt; idev,
  2398 +                             UnicastForwardCallback ucb, MulticastForwardCallback mcb,
  2399 +                             LocalDeliverCallback lcb, ErrorCallback ecb) = 0;
  2400 </pre>
  2401 
  2402 </li>
  2403 <li><b> previous class Ipv4Route, Ipv4MulticastRoute renamed; new classes with
  2404 those same names added</b>
  2405 <p> The previous class Ipv4Route and Ipv4MulticastRoute are used by 
  2406 Ipv4StaticRouting and Ipv4GlobalRouting to record internal routing table
  2407 entries, so they were renamed to class Ipv4RoutingTableEntry and
  2408 Ipv4MulticastRoutingTableEntry, respectively.  In their place, new
  2409 class Ipv4Route and class Ipv4MulticastRoute have been added.  These
  2410 are reference-counted objects that are analogous to Linux struct
  2411 rtable and struct mfc_cache, respectively, to achieve better compatibility
  2412 with Linux routing architecture in the future.  
  2413 
  2414 <li><b> class Ipv4 address-to-interface mapping functions changed</b>
  2415 <p>  There was some general cleanup of functions that involve mappings
  2416 from Ipv4Address to either NetDevice or Ipv4 interface index.  
  2417 <pre>
  2418 -  virtual uint32_t FindInterfaceForAddr (Ipv4Address addr) const = 0;
  2419 -  virtual uint32_t FindInterfaceForAddr (Ipv4Address addr, Ipv4Mask mask) const = 0;
  2420 +  virtual int32_t GetInterfaceForAddress (Ipv4Address address) const = 0;
  2421 +  virtual int32_t GetInterfaceForPrefix (Ipv4Address address, Ipv4Mask mask) const = 0;
  2422 -  virtual int32_t FindInterfaceForDevice(Ptr&lt;NetDevice&gt; nd) const = 0;
  2423 +  virtual int32_t GetInterfaceForDevice (Ptr&lt;const NetDevice&gt; device) const = 0;
  2424 -  virtual Ipv4Address GetSourceAddress (Ipv4Address destination) const = 0;
  2425 -  virtual bool GetInterfaceForDestination (Ipv4Address dest,
  2426 -  virtual uint32_t GetInterfaceByAddress (Ipv4Address addr, Ipv4Mask mask = Ipv4Mask("255.255.255.255"));
  2427 </pre>
  2428 
  2429 <li><b> class Ipv4 multicast join API deleted</b>
  2430 <p> The following methods are not really used in present form since IGMP
  2431 is not being generated, so they have been removed (planned to be replaced
  2432 by multicast socket-based calls in the future):
  2433 
  2434 <pre>
  2435 - virtual void JoinMulticastGroup (Ipv4Address origin, Ipv4Address group) = 0;
  2436 - virtual void LeaveMulticastGroup (Ipv4Address origin, Ipv4Address group) = 0;
  2437 </pre>
  2438 
  2439 
  2440 <li><b>Deconflict NetDevice::ifIndex and Ipv4::ifIndex (bug 85).</b>
  2441 <p>All function parameters named "ifIndex" that refer 
  2442 to an Ipv4 interface are instead named "interface".
  2443 <pre>
  2444 - static const uint32_t Ipv4RoutingProtocol::IF_INDEX_ANY = 0xffffffff;
  2445 + static const uint32_t Ipv4RoutingProtocol::INTERFACE_ANY = 0xffffffff;
  2446 
  2447 - bool Ipv4RoutingProtocol::RequestIfIndex (Ipv4Address destination, uint32_t&amp; ifIndex);
  2448 + bool Ipv4RoutingProtocol::RequestInterface (Ipv4Address destination, uint32_t&amp; interface);
  2449 (N.B. this particular function is planned to be renamed to RouteOutput() in the
  2450 proposed IPv4 routing refactoring)
  2451 
  2452 - uint32_t Ipv4::GetIfIndexByAddress (Ipv4Address addr, Ipv4Mask mask);
  2453 + int_32t Ipv4::GetInterfaceForAddress (Ipv4Address address, Ipv4Mask mask) const;
  2454 
  2455 - bool Ipv4::GetIfIndexForDestination (Ipv4Address dest, uint32_t &amp;ifIndex) const;
  2456 + bool Ipv4::GetInterfaceForDestination (Ipv4Address dest, uint32_t &amp;interface) const;
  2457 (N.B. this function is not needed in the proposed Ipv4 routing refactoring)
  2458 </pre>
  2459 
  2460 
  2461 <li><b>Allow multiple IPv4 addresses to be assigned to an interface (bug 188)</b>
  2462   <ul>
  2463   <li> Add class Ipv4InterfaceAddress:  
  2464   This is a new class to resemble Linux's struct in_ifaddr.  It holds IP addressing information, including mask,
  2465   broadcast address, scope, whether primary or secondary, etc.
  2466   <pre>
  2467 +  virtual uint32_t AddAddress (uint32_t interface, Ipv4InterfaceAddress address) = 0;
  2468 +  virtual Ipv4InterfaceAddress GetAddress (uint32_t interface, uint32_t addressIndex) const = 0;
  2469 +  virtual uint32_t GetNAddresses (uint32_t interface) const = 0;
  2470   </pre>
  2471   <li>Regarding legacy API usage, typically where you once did the following,
  2472   using the public Ipv4 class interface (e.g.):
  2473   <pre>
  2474   ipv4A-&gt;SetAddress (ifIndexA, Ipv4Address ("172.16.1.1"));
  2475   ipv4A-&gt;SetNetworkMask (ifIndexA, Ipv4Mask ("255.255.255.255"));
  2476   </pre>
  2477   you now do:
  2478   <pre>
  2479   Ipv4InterfaceAddress ipv4IfAddrA = Ipv4InterfaceAddress (Ipv4Address ("172.16.1.1"), Ipv4Mask ("255.255.255.255"));
  2480   ipv4A-&gt;AddAddress (ifIndexA, ipv4IfAddrA);
  2481   </pre>
  2482   <li> At the helper API level, one often gets an address from an interface
  2483   container.  We preserve the legacy GetAddress (uint32_t i) but it
  2484   is documented that this will return only the first (address index 0)
  2485   address on the interface, if there are multiple such addresses. 
  2486   We provide also an overloaded variant for the multi-address case: 
  2487 
  2488   <pre>
  2489 Ipv4Address Ipv4InterfaceContainer::GetAddress (uint32_t i)
  2490 + Ipv4Address Ipv4InterfaceContainer::GetAddress (uint32_t i, uint32_t j)
  2491   </pre>
  2492 
  2493   </ul>
  2494 
  2495 <li><b>New WifiMacHelper objects</b>
  2496 <p>The type of wifi MAC is now set by two new specific helpers, NqosWifiMacHelper for non QoS MACs and QosWifiMacHelper for Qos MACs. They are passed as argument to WifiHelper::Install methods.</li>
  2497   <pre>
  2498 - void WifiHelper::SetMac (std::string type, std::string n0 = "", const AttributeValue &amp;v0 = EmptyAttributeValue (),...)
  2499 
  2500 - NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phyHelper, NodeContainer c) const
  2501 + NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phyHelper, const WifiMacHelper &amp;macHelper, NodeContainer c) const
  2502 
  2503 - NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phy, Ptr&lt;Node&gt; node) const
  2504 + NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phy, const WifiMacHelper &amp;mac, Ptr&lt;Node&gt; node) const
  2505 
  2506 - NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phy, std::string nodeName) const
  2507 + NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phy, const WifiMacHelper &amp;mac, std::string nodeName) const
  2508   </pre>
  2509   See src/helper/nqos-wifi-mac-helper.h and src/helper/qos-wifi-mac-helper.h for more details.
  2510   </p>
  2511 
  2512 <li><b>Remove Mac48Address::IsMulticast</b>
  2513   <p>This method was considered buggy and unsafe to call. Its replacement is Mac48Address::IsGroup.
  2514   </li>
  2515 
  2516 </ul>
  2517 
  2518 <h2>Changed behavior:</h2>
  2519 <ul>
  2520 </ul>
  2521 
  2522 <hr>
  2523 <h1>Changes from ns-3.3 to ns-3.4</h1>
  2524 
  2525 <h2>Changes to build system:</h2>
  2526 <ul>
  2527 <li>A major option regarding the downloading and building of ns-3 has been
  2528 added for ns-3.4 -- the ns-3-allinone feature.  This allows a user to
  2529 get the most common options for ns-3 downloaded and built with a minimum
  2530 amount of trouble.  See the ns-3 tutorial for a detailed explanation of
  2531 how to use this new feature.</li>
  2532 
  2533 <li>The build system now runs build items in parallel by default.  This includes
  2534 the regression tests.</li>
  2535 </ul>
  2536 
  2537 <h2>New API:</h2>
  2538 <ul>
  2539 <li>XML support has been added to the ConfigStore in src/contrib/config-store.cc</li>
  2540 
  2541 <li>The ns-2 calendar queue scheduler option has been ported to src/simulator</li>
  2542 
  2543 <li>A ThreeLogDistancePropagationLossModel has been added to src/devices/wifi</li>
  2544 
  2545 <li>ConstantAccelerationMobilityModel in src/mobility/constant-acceleration-mobility-model.h</li>
  2546 
  2547 <li>A new emulation mode is supported with the TapBridge net device (see
  2548 src/devices/tap-bridge)</li>
  2549 
  2550 <li>A new facility for naming ns-3 Objects is included (see
  2551 src/core/names.{cc,h})</li>
  2552 
  2553 <li>Wifi multicast support has been added in src/devices/wifi</li>
  2554 </ul>
  2555 
  2556 <h2>Changes to existing API:</h2>
  2557 
  2558 <ul>
  2559 <li>Some fairly significant changes have been made to the API of the
  2560 random variable code.  Please see the ns-3 manual and src/core/random-variable.cc
  2561 for details.</li>
  2562 
  2563 <li>The trace sources in the various NetDevice classes has been completely
  2564 reworked to allow for a consistent set of trace sources across the
  2565 devices.  The names of the trace sources have been changed to provide
  2566 some context with respect to the level at which the trace occurred.
  2567 A new set of trace sources has been added which emulates the behavior
  2568 of packet sniffers.  These sources have been used to implement tcpdump-
  2569 like functionality and are plumbed up into the helper classes.  The 
  2570 user-visible changes are the trace source name changes and the ability
  2571 to do promiscuous-mode pcap tracing via helpers.  For further information
  2572 regarding these changes, please see the ns-3 manual</li>
  2573 
  2574 <li>StaticMobilityModel has been renamed ConstantPositionMobilityModel
  2575 StaticSpeedMobilityModel has been renamed ConstantVelocityMobilityModel</li>
  2576 
  2577 <li>The Callback templates have been extended to support more parameters.
  2578 See src/core/callback.h</li>
  2579 
  2580 <li>Many helper API have been changed to allow passing Object-based parameters
  2581 as string names to ease working with the object name service.</li>
  2582 
  2583 <li>The Config APIs now accept path segments that are names defined by the
  2584 object name service.</li>
  2585 
  2586 <li>Minor changes were made to make the system build under the Intel C++ compiler.</li>
  2587 
  2588 <li>Trace hooks for association and deassociation to/from an access point were
  2589 added to src/devices/wifi/nqsta-wifi-mac.cc</li>
  2590 </ul>
  2591 
  2592 <h2>Changed behavior:</h2>
  2593 
  2594 <ul>
  2595 <li>The tracing system rework has introduced some significant changes in the
  2596 behavior of some trace sources, specifically in the positioning of trace sources
  2597 in the device code.  For example, there were cases where the packet transmit 
  2598 trace source was hit before the packet was enqueued on the device transmit quueue.
  2599 This now happens just before the packet is transmitted over the channel medium.
  2600 The scope of the changes is too large to be included here.  If you have concerns
  2601 regarding trace semantics, please consult the net device documentation for details.
  2602 As is usual, the ultimate source for documentation is the net device source code.</li>
  2603 </ul>
  2604 
  2605 <hr>
  2606 <h1>Changes from ns-3.2 to ns-3.3</h1>
  2607 
  2608 <h2>New API:</h2>
  2609 <ul>
  2610 <li>
  2611 ns-3 ABORT macros in src/core/abort.h
  2612 Config::MatchContainer
  2613 ConstCast and DynamicCast helper functions for Ptr casting
  2614 StarTopology added to several topology helpers
  2615 NetDevice::IsBridge () 
  2616 </li>
  2617 
  2618 <li>17-11-2008; changeset 
  2619 <a href="http://code.nsnam.org/ns-3-dev/rev/4c1c3f6bcd03">4c1c3f6bcd03</a></li>
  2620 <ul>
  2621 <li>
  2622 The PppHeader previously defined in the point-to-point-net-device code has been 
  2623 made public.
  2624 </li>
  2625 </ul>
  2626 
  2627 <li>17-11-2008; changeset 
  2628 <a href="http://code.nsnam.org/ns-3-dev/rev/16c2970a0344">16c2970a0344</a></li>
  2629 <ul>
  2630 <li>
  2631 An emulated net device has been added as enabling technology for ns-3 emulation
  2632 scenarios.  See src/devices/emu and examples/emu-udp-echo.cc for details.
  2633 </li>
  2634 </ul>
  2635 
  2636 <li>17-11-2008; changeset 
  2637 <a href="http://code.nsnam.org/ns-3-dev/rev/4222173d1e6d">4222173d1e6d</a></li>
  2638 <ul>
  2639 <li>
  2640 Added method InternetStackHelper::EnableAsciiChange to allow allow a user to 
  2641 hook ascii trace to the drop trace events in Ipv4L3Protocol and ArpL3Protocol.
  2642 </li>
  2643 </ul>
  2644 
  2645 </ul>
  2646 <h2>Changes to existing API:</h2>
  2647 <ul>
  2648 
  2649 <li> NetDevice::MakeMulticastAddress() was renamed to NetDevice::GetMulticast()
  2650 and the original GetMulticast() removed </li>
  2651 
  2652 <li> Socket API changes:
  2653 <ul>
  2654 <li> return type of SetDataSentCallback () changed from bool to void </li>
  2655 <li> Socket::Listen() no longer takes a queueLimit argument</li>
  2656 </ul>
  2657 
  2658 <li> As part of the Wifi Phy rework, there have been several API changes
  2659 at the low level and helper API level.  </li>
  2660 <ul>
  2661 <li>  At the helper API level, the WifiHelper was split to three classes: 
  2662 a WifiHelper, a YansWifiChannel helper, and a YansWifiPhy helper.  Some
  2663 functions like Ascii and Pcap tracing functions were moved from class
  2664 WifiHelper to class YansWifiPhyHelper. 
  2665 <li>  At the low-level API, there have been a number of changes to
  2666 make the Phy more modular:</li>
  2667 <ul>
  2668 <li> composite-propagation-loss-model.h is removed</li>
  2669 <li> DcfManager::NotifyCcaBusyStartNow() has changed name</li>
  2670 <li> fragmentation related functions (e.g. DcaTxop::GetNFragments()) have
  2671 changed API to account for some implementation changes</li>
  2672 <li> Interference helper and error rate model added </li>
  2673 <li> JakesPropagationLossModel::GetLoss() moved to PropagationLoss() class</li>
  2674 <li> base class WifiChannel made abstract </li>
  2675 <li> WifiNetDevice::SetChannel() removed </li>
  2676 <li> a WifiPhyState helper class added </li>
  2677 <li> addition of the YansWifiChannel and YansWifiPhy classes </li>
  2678 </ul>
  2679 </ul>
  2680 
  2681 <li>17-11-2008; changeset 
  2682 <a href="http://code.nsnam.org/ns-3-dev/rev/dacfd1f07538">dacfd1f07538</a></li>
  2683 <ul>
  2684 <li>
  2685 Change attribute "RxErrorModel" to "ReceiveErrorModel" in CsmaNetDevice for 
  2686 consistency between devices.
  2687 </li>
  2688 </ul>
  2689 
  2690 </ul>
  2691 <h2>changed behavior:</h2>
  2692 <ul>
  2693 
  2694 <li>17-11-2008; changeset 
  2695 <a href="http://code.nsnam.org/ns-3-dev/rev/ed0dfce40459">ed0dfce40459</a></li>
  2696 <ul>
  2697 <li>
  2698 Relax reasonableness testing in Ipv4AddressHelper::SetBase to allow the 
  2699 assignment of /32 addresses.
  2700 </li>
  2701 </ul>
  2702 
  2703 <li>17-11-2008; changeset 
  2704 <a href="http://code.nsnam.org/ns-3-dev/rev/756887a9bbea">756887a9bbea</a></li>
  2705 <ul>
  2706 <li>
  2707 Global routing supports bridge devices.
  2708 </li>
  2709 </ul>
  2710 </ul>
  2711 
  2712 <hr>
  2713 <h1>Changes from ns-3.1 to ns-3.2</h1>
  2714 
  2715 <h2>New API:</h2>
  2716 <ul>
  2717 
  2718 <li>26-08-2008; changeset 
  2719 <a href="http://code.nsnam.org/ns-3-dev/rev/5aa65b1ea001">5aa65b1ea001</a></li>
  2720 <ul>
  2721 <li>
  2722 Add multithreaded and real-time simulator implementation.  Allows for emulated
  2723 net devices running in threads other than the main simulation thread to schedule
  2724 events.  Allows for pacing the simulation clock at 1x real-time.
  2725 </li>
  2726 </ul>
  2727 
  2728 
  2729 <li>26-08-2008; changeset 
  2730 <a href="http://code.nsnam.org/ns-3-dev/rev/c69779f5e51e">c69779f5e51e</a></li>
  2731 <ul>
  2732 <li>
  2733 Add threading and synchronization primitives.  Enabling technology for 
  2734 multithreaded simulator implementation.
  2735 </li>
  2736 </ul>
  2737 
  2738 </ul>
  2739 <h2>New API in existing classes:</h2>
  2740 <ul>
  2741 
  2742 <li>01-08-2008; changeset 
  2743 <a href="http://code.nsnam.org/ns-3-dev/rev/a18520551cdf">a18520551cdf</a></li>
  2744 <ul>
  2745 <li>class ArpCache has two new attributes:  MaxRetries 
  2746 and a Drop trace.  It also has some new public methods but these are 
  2747 mostly for internal use.
  2748 </ul>
  2749 </li>
  2750 
  2751 </ul>
  2752 <h2>Changes to existing API:</h2>
  2753 <ul>
  2754 
  2755 <li>05-09-2008; changeset 
  2756 <a href="http://code.nsnam.org/ns-3-dev/rev/aa1fb0f43571">aa1fb0f43571</a></li>
  2757 <ul>
  2758 <li>
  2759 Change naming of MTU and packet size attributes in CSMA and Point-to-Point devices<br>
  2760 After much discussion it was decided that the preferred way to think about 
  2761 the different senses of transmission units and encapsulations was to call the 
  2762 MAC MTU simply MTU and to use the overall packet size as the PHY-level attribute
  2763 of interest.  See the Doxygen of CsmaNetDevice::SetFrameSize and 
  2764 PointToPointNetDevice::SetFrameSize for a detailed description.
  2765 </li>
  2766 </ul>
  2767 
  2768 <li>25-08-2008; changeset 
  2769 <a href="http://code.nsnam.org/ns-3-dev/rev/e5ab96db540e">e5ab96db540e</a></li>
  2770 <ul>
  2771 <li>
  2772 bug 273: constify packet pointers.<br>
  2773 The normal and the promiscuous receive callbacks of the NetDevice API
  2774 have been changed from:
  2775 <pre>
  2776 Callback&lt;bool,Ptr&lt;NetDevice&gt;,Ptr&lt;Packet&gt;,uint16_t,const Address &amp;&gt;
  2777 Callback&lt;bool,Ptr&lt;NetDevice&gt;, Ptr&lt;Packet&gt;, uint16_t,
  2778          const Address &amp;, const Address &amp;, enum PacketType &gt;
  2779 </pre>
  2780 to:
  2781 <pre>
  2782 Callback&lt;bool,Ptr&lt;NetDevice&gt;,Ptr&lt;const Packet&gt;,uint16_t,const Address &amp;&gt;
  2783 Callback&lt;bool,Ptr&lt;NetDevice&gt;, Ptr&lt;const Packet&gt;, uint16_t,
  2784          const Address &amp;, const Address &amp;, enum PacketType &gt;
  2785 </pre>
  2786 to avoid the kind of bugs reported in 
  2787 <a href="http://www.nsnam.org/bugzilla/show_bug.cgi?id=273">bug 273</a>.
  2788 Users who implement a subclass of the NetDevice base class need to change the signature
  2789 of their SetReceiveCallback and SetPromiscReceiveCallback methods.
  2790 </li>
  2791 </ul>
  2792 
  2793 
  2794 <li>04-08-2008; changeset 
  2795 <a href="http://code.nsnam.org/ns-3-dev/rev/cba7b2b80fe8">cba7b2b80fe8</a></li>
  2796 <ul>
  2797 <li>
  2798 Cleanup of MTU confusion and initialization in CsmaNetDevice<br>
  2799 The MTU of the CsmaNetDevice defaulted to 65535.  This did not correspond with
  2800 the expected MTU found in Ethernet-like devices.  Also there was not clear 
  2801 documentation regarding which MTU was being set.  There are two MTU here, one
  2802 at the MAC level and one at the PHY level.  We split out the MTU setting to make
  2803 this more clear and set the default PHY level MTU to 1500 to be more like
  2804 Ethernet.  The encapsulation mode defaults to LLC/SNAP which then puts the
  2805 MAC level MTU at 1492 by default.  We allow users to now set the encapsulation
  2806 mode, MAC MTU and PHY MTU while keeping the three values consistent.  See the
  2807 Doxygen of CsmaNetDevice::SetMaxPayloadLength for a detailed description of the
  2808 issues and solution.
  2809 </li>
  2810 </ul>
  2811 
  2812 <li>21-07-2008; changeset 
  2813 <a href="
  2814 http://code.nsnam.org/ns-3-dev/rev/99698bc858e8">99698bc858e8</a></li>
  2815 <ul>
  2816 <li> class NetDevice has added a pure virtual method that
  2817 must be implemented by all subclasses:
  2818 <pre>
  2819 virtual void SetPromiscReceiveCallback (PromiscReceiveCallback cb) = 0;
  2820 </pre>
  2821 All NetDevices must support this method, and must call this callback
  2822 when processing packets in the receive direction (the appropriate place
  2823 to call this is device-dependent).  An approach to stub this out
  2824 temporarily, if you do not care about immediately enabling this
  2825 functionality, would be to add this to your device:
  2826 <pre>
  2827 void
  2828 ExampleNetDevice::SetPromiscReceiveCallback
  2829 (NetDevice::PromiscReceiveCallback cb)
  2830 { 
  2831   NS_ASSERT_MSG (false, "No implementation yet for
  2832 SetPromiscReceiveCallback");
  2833 }
  2834 </pre>
  2835 To implement this properly, consult the CsmaNetDevice for examples of
  2836 when the m_promiscRxCallback is called.
  2837 </li>
  2838 </ul>
  2839 
  2840 <li>03-07-2008; changeset 
  2841 <a href="http://code.nsnam.org/ns-3-dev/rev/d5f8e5fae1c6">d5f8e5fae1c6</a></li>
  2842 <ul>
  2843 <li>
  2844 Miscellaneous cleanup of Udp Helper API, to fix bug 234
  2845 <pre>
  2846 class UdpEchoServerHelper
  2847 {
  2848 public:
  2849 - UdpEchoServerHelper ();
  2850 - void SetPort (uint16_t port); 
  2851 + UdpEchoServerHelper (uint16_t port);
  2852 + 
  2853 + void SetAttribute (std::string name, const AttributeValue &amp;value);
  2854 ApplicationContainer Install (NodeContainer c);
  2855 
  2856 class UdpEchoClientHelper
  2857 {
  2858 public:
  2859 - UdpEchoClientHelper ();
  2860 + UdpEchoClientHelper (Ipv4Address ip, uint16_t port);
  2861 - void SetRemote (Ipv4Address ip, uint16_t port);
  2862 - void SetAppAttribute (std::string name, const AttributeValue &amp;value);
  2863 + void SetAttribute (std::string name, const AttributeValue &amp;value);
  2864 ApplicationContainer Install (NodeContainer c);
  2865 </pre>
  2866 </li>
  2867 </ul>
  2868 
  2869 <li>03-07-2008; changeset 
  2870 <a href="
  2871 http://code.nsnam.org/ns-3-dev/rev/3cdd9d60f7c7">3cdd9d60f7c7</a></li>
  2872 <ul>
  2873 <li>
  2874 Rename all instances method names using "Set..Parameter" to "Set..Attribute"
  2875 (bug 232)
  2876 </li>
  2877 <li> How to fix your code:  Any use of helper API that was using a method
  2878 "Set...Parameter()" should be changed to read "Set...Attribute()".  e.g.
  2879 <pre>
  2880 - csma.SetChannelParameter ("DataRate", DataRateValue (5000000));
  2881 - csma.SetChannelParameter ("Delay", TimeValue (MilliSeconds (2)));
  2882 + csma.SetChannelAttribute ("DataRate", DataRateValue (5000000));
  2883 + csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2)));
  2884 </pre>
  2885 </li>
  2886 </ul>
  2887 </li>
  2888 
  2889 </ul>
  2890 <h2>Changed behavior:</h2>
  2891 <ul>
  2892 
  2893 <li>07-09-2008; changeset 
  2894 <a href="http://code.nsnam.org/ns-3-dev/rev/5d836ab1523b">5d836ab1523b</a></li>
  2895 <ul>
  2896 
  2897 <li>
  2898 Implement a finite receive buffer for TCP<br>
  2899 The native TCP model in TcpSocketImpl did not support a finite receive buffer.
  2900 This changeset adds the following functionality in this regard:
  2901 <ul>
  2902 <li>
  2903 Being able to set the receiver buffer size through the attributes system.
  2904 </li>
  2905 <li>
  2906 This receiver buffer size is now correctly exported in the TCP header as the
  2907 advertised window.  Prior to this changeset, the TCP header advertised window
  2908 was set to the maximum size of 2^16 bytes.
  2909 window
  2910 </li>
  2911 <li>
  2912 The aforementioned window size is correctly used for flow control, i.e. the
  2913 sending TCP will not send more data than available space in the receiver's
  2914 buffer.
  2915 </li>
  2916 <li>
  2917 In the case of a receiver window collapse, when a advertised zero-window
  2918 packet is received, the sender enters the persist probing state in which
  2919 it sends probe packets with one payload byte at exponentially backed-off
  2920 intervals up to 60s.  The receiver will continue to send advertised 
  2921 zero-window ACKs of the old data so long as the receiver buffer remains full.
  2922 When the receiver window clears up due to an application read, the TCP
  2923 will finally ACK the probe byte, and update its advertised window appropriately.
  2924 </li>
  2925 </ul>
  2926 See 
  2927 <a href="http://www.nsnam.org/bugzilla/show_bug.cgi?id=239"> bug 239 </a> for
  2928 more.
  2929 </li>
  2930 </ul>
  2931 
  2932 <li>07-09-2008; changeset 
  2933 <a href="http://code.nsnam.org/ns-3-dev/rev/7afa66c2b291">7afa66c2b291</a></li>
  2934 <ul>
  2935 <li>
  2936 Add correct FIN exchange behavior during TCP closedown<br>
  2937 The behavior of the native TcpSocketImpl TCP model was such that the final
  2938 FIN exchange was not correct, i.e. calling Socket::Close didn't send a FIN
  2939 packet, and even if it had, the ACK never came back, and even if it had, the
  2940 ACK would have incorrect sequence number.  All these various problems have been
  2941 addressed by this changeset.  See 
  2942 <a href="http://www.nsnam.org/bugzilla/show_bug.cgi?id=242"> bug 242 </a> for
  2943 more.
  2944 </li>
  2945 </ul>
  2946 
  2947 <li> 28-07-2008; changeset 
  2948 <a href="http://code.nsnam.org/ns-3-dev/rev/6f68f1044df1">6f68f1044df1</a>
  2949 <ul>
  2950 <li>
  2951 OLSR: HELLO messages hold time changed to 3*hello
  2952 interval from hello interval.  This is an important bug fix as
  2953 hold time == refresh time was never intentional, as it leads to
  2954 instability in neighbor detection.
  2955 </ul>
  2956 </li>
  2957 
  2958 </ul>
  2959 
  2960 </body>
  2961 </html>