CHANGES.html 174 KB
Newer Older
Tom Henderson's avatar
Tom Henderson committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <title>ns-3 Change Log</title>
</head>
<body>

<h1>
ns-3: API and model change history</h1>
<!--
This ChangeLog is updated in the reverse order 
with the most recent changes coming first.  Date format:  DD-MM-YYYY
-->
<p>
ns-3 is an evolving system and there will be API or behavioral changes
from time to time.   Users who try to use scripts or models across
versions of ns-3 may encounter problems at compile time, run time, or
may see the simulation output change.  </p>
<p>
We have adopted the development policy that we are going to try to ease
the impact of these changes on users by documenting these changes in a
single place (this file), and not by providing a temporary or permanent
backward-compatibility software layer.  </p>
<p>
26
27
28
29
30
31
32
A related file is the RELEASE_NOTES file in the top level directory.
This file complements RELEASE_NOTES by focusing on API and behavioral
changes that users upgrading from one release to the next may encounter.
RELEASE_NOTES attempts to comprehensively list all of the changes
that were made.  There is generally some overlap in the information 
contained in RELEASE_NOTES and this file.  </p>
<p>
Tom Henderson's avatar
Tom Henderson committed
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
The goal is that users who encounter a problem when trying to use older
code with newer code should be able to consult this file to find
guidance as to how to fix the problem.  For instance, if a method name
or signature has changed, it should be stated what the new replacement
name is. </p>
<p>
Note that users who upgrade the simulator across versions, or who work
directly out of the development tree, may find that simulation output
changes even when the compilation doesn't break, such as when a
simulator default value is changed.  Therefore, it is good practice for
_anyone_ using code across multiple ns-3 releases to consult this file,
as well as the RELEASE_NOTES, to understand what has changed over time.
</p>
<p>
This file is a best-effort approach to solving this issue; we will do
our best but can guarantee that there will be things that fall through
the cracks, unfortunately.  If you, as a user, can suggest improvements
to this file based on your experience, please contribute a patch or drop
51
us a note on ns-developers mailing list.</p>
Tom Henderson's avatar
Tom Henderson committed
52

53
54
55
56
<hr>
<h1>Changes from ns-3.31 to ns-3.32</h1>
<h2>New API:</h2>
<ul>
57
<li>A new TCP congestion control, <b>TcpLinuxReno</b>, has been added.</li>
58
<li>Added, to <b>PIE queue disc</b>, <b>queue delay calculation using timestamp</b> feature (Linux default behavior), <b>cap drop adjustment</b> feature (Section 5.5 of RFC 8033), <b>ECN</b> (Section 5.1 of RFC 8033) and <b>derandomization</b> feature (Section 5.4 of RFC 8033).</li>
59
<li>Added <b>L4S Mode</b> to FqCoDel and CoDel queue discs</li>
60
<li> A model for <b>dynamic pacing</b> has been added to TCP.</li>
61
<li>Added <b>Active/Inactive feature</b> to PIE queue disc</li>
62
63
64
65
66
<li>Added <b>netmap</b> and <b>DPDK</b> emulation device variants</li>
<li>Added capability to configure <b>STL pair and containers as attributes</b></li>
<li> Added <b>CartesianToGeographic</b> coordinate conversion capability
<li> Added <b>LollipopCounter</b>, a sequence number counter type 
<li> Added <b>6 GHz band</b> support for Wi-Fi 802.11ax
67
68
69
</ul>
<h2>Changes to existing API:</h2>
<ul>
70
<li>The <b>Sifs</b>, <b>Slot</b> and <b>Pifs</b> attributes have been moved from <b>WifiMac</b> to <b>WifiPhy</b> to better reflect that they are PHY characteristics, to decouple the MAC configuration from the PHY configuration and to ease the support for future standards.</li>
71
72
73
<li>The Histogram class was moved from the flow-monitor module to the stats
module to make it more easily accessed.  If you previously used Histogram by
by including flow-monitor.h you will need to change that to stats-module.h.
Tom Henderson's avatar
Tom Henderson committed
74
75
76
77
78
</li>
<li>The <b>WifiHelper::SetStandard (WifiPhyStandard standard)</b> method no
longer takes a WifiPhyStandard enum, but instead takes a similarly named 
WifiStandard enum.  If before you specified a value such as WIFI_PHY_STANDARD_xxx, now you must specify WIFI_STANDARD_xxx.
</li>
79
<li> <b>PIE</b> queue disc now uses <b>Timestamp</b> for queue delay calculation as default instead of <b>Dequeue Rate Estimator</b></li>
80
81
82
</ul>
<h2>Changes to build system:</h2>
<ul>
Tom Henderson's avatar
Tom Henderson committed
83
84
<li>Added "--enable-asserts" and "--enable-logs" to waf configure, to selectively enable asserts and/or logs in release and optimized builds.</li>
<li>A build version reporting system has been added by extracting data from the 
85
86
local git repository (or a standalone file if a git repository is not present).  </li>
<li>Added support for EditorConfig</li>
87
88
89
</ul>
<h2>Changed behavior:</h2>
<ul>
90
<li>Support for <b>RIFS</b> has been dropped from wifi. RIFS has been obsoleted by the 802.11 standard and support for it was not implemented according to the standard.</li>
91
<li>The default loss recovery algorithm for TCP has been changed from Classic Recovery to Proportional Rate Reduction (PRR).</li>
92
<li>The behavior of <b>TcpPrrRecovery</b> algorithm was aligned to that of Linux.</li>
93
<li> <b>PIE</b> queue disc now uses <b>Timestamp</b> for queue delay calculation as default instead of <b>Dequeue Rate Estimator</b></li>
94
<li>TCP pacing, when enabled, now adjusts the rate dynamically based on the window size, rather than just enforcing a constant rate.</li>
Sebastien Deronne's avatar
Sebastien Deronne committed
95
<li>WifiPhy forwards up MPDUs from an A-MPDU under reception as long as they arrive at the PHY, instead of forwarding up the whole A-MPDU once its reception is completed.</li>
96
<li>The ns-3 TCP model was changed to set the initial congestion window to 10 segments instead of 1 segment (to align with default Linux configuration).</li>
97
98
</ul>

99
100
101
102
<hr>
<h1>Changes from ns-3.30 to ns-3.31</h1>
<h2>New API:</h2>
<ul>
103
104
<li> A <b>TCP DCTCP</b> model has been added.</li>
<li> <b>3GPP TR 38.901</b> pathloss, channel condition, antenna array, and fast fading models have been added.</li>
105
<li> New <b>...FailSafe ()</b> variants of the <b> Config </b> and <b>Config::MatchContainer</b> functions which set Attributes or connect TraceSources.  These all return a boolean indicating if any attributes could be set (or trace sources connected).  These are useful if you are not sure that the requested objects exist, for example in AnimationInterface.</li>
106
<li> New attributes for <b> Ipv4L3Protocol</b> have been added to enable RFC 6621-based duplicate packet detection (DPD) (<b>EnableDuplicatePacketDetection</b>) and to control the cache expiration time (<b>DuplicateExpire</b>).</li>
107
108
109
110
111
112
113
114
115
<li><b> MakeConsistent </b> method of <b> BuildingsHelper </b> class is 
deprecated and moved to <b> MobilityBuildingInfo </b> class. <b> DoInitialize </b> 
method of the <b> MobilityBuildingInfo </b> class would be responsible for making 
the mobility model of a node consistent at the beginning of a simulation. 
Therefore, there is no need for an explicit call to <b> MakeConsistent </b> in a simulation script.</li>
<li> The <b> IsInside </b> method of <b> MobilityBuildingInfo </b> class is extended 
to make the mobility model of a moving node consistent.</li>
<li> The <b> IsOutside </b> method of <b> MobilityBuildingInfo </b> class is 
deprecated. The <b> IsInside </b> method should be use to check the position of a node.</li>
116
<li>A new abstract base class, <b>WifiAckPolicySelector</b>, is introduced to implement
117
118
119
different techniques for selecting the acknowledgment policy for PSDUs containing
QoS Data frames. Wifi, mesh and wave helpers provide a SetAckPolicySelectorForAc
method to configure a specific ack policy selector for a given Access Category.</li>
120
121
<ul>
<li>The default ack policy selector is named <b>ConstantWifiAckPolicySelector</b>, which
122
123
124
allows to choose between Block Ack policy and Implicit Block Ack Request policy and
allows to request an acknowledgment after a configurable number of MPDUs have been
transmitted.</li>
125
126
127
128
129
130
131
</ul>
<li>The <b>MaxSize</b> attribute is removed from the <b>QueueBase</b> base class and moved to subclasses. A new MaxSize attribute is therefore added to the DropTailQueue class, while the MaxQueueSize attribute of the WifiMacQueue class is renamed as MaxSize for API consistency.</li>
<li> Two new <b>Application sequence number and timestamp</b> variants have been added, to support packet delivery tracing.
<ul>
<li> A new sequence and timestamp header variant for applications has been added.  The <b>SeqTsEchoHeader</b> contains an additional timestamp field for use in echoing a timestamp back to a sender.</li>
<li> TCP-based applications (OnOffApplication, BulkSendApplication, and PacketSink) support a new header, <b>SeqTsSizeHeader</b>, to convey sequence number, timestamp, and size data.  Use is controlled by the "EnableSeqTsSizeHeader" attribute.</li>
</ul>
132
<li>Added a new trace source <b>PhyRxPayloadBegin</b> in WifiPhy for tracing begin of PSDU reception.</li>
133
<li>Added the class <b>RandomWalk2dOutdoorMobilityModel</b> that models a random walk which does not enter any building.</li>
134
135
<li>Added support for the <b>Cake set-associative hash</b> in the FqCoDel queue disc</li>
<li>Added support for <b>ECN marking for CoDel and FqCoDel</b> queue discs</li>
136
137
138
</ul>
<h2>Changes to existing API:</h2>
<ul>
139
140
<li> The API for <b>enabling and disabling ECN</b> in TCP sockets has been refactored.</li>
<li> The <b>LTE HARQ</b> related methods in LteEnbPhy and LteUePhy have been renamed, and the LteHelper updated.</li>
Tom Henderson's avatar
Tom Henderson committed
141
<li> Previously the <b>Config::Connect</b> and <b>Config::Set</b> families of functions would fail silently if the attribute or trace source didn't exist on the path given (typically due to spelling errors). Now those functions will throw a fatal error.  If you need the old behavior use the new  <b>...FailSafe ()</b> variants.</li>
Tom Henderson's avatar
Tom Henderson committed
142
<li>The internal TCP API for <b>TcpCongestionOps</b> has been extended to support the <b>CongControl</b> method to allow for delivery rate estimation feedback to the congestion control mechanism.</li>
Katerina Koutlia's avatar
Katerina Koutlia committed
143
<li>Functions <b>LteEnbPhy::ReceiveUlHarqFeedback</b> and <b>LteUePhy::ReceiveLteDlHarqFeedback</b> are renamed to <b>LteEnbPhy::ReportUlHarqFeedback</b> and <b>LteUePhy::EnqueueDlHarqFeedback</b>, respectively to avoid confusion about their functionality. <b>LteHelper</b> is updated accordingly.</li>
Nat's avatar
Nat committed
144
<li>Now on, instead of <b>uint8_t</b>, <b>uint16_t</b> would be used to store a bandwidth value in LTE.</li>
145
<li>The preferred way to declare instances of <b>CommandLine</b> is now through a macro: <b>COMMANDLINE (cmd)</b>.  This enables us to add the <b>CommandLine::Usage()</b> message to the Doxygen for the program.</li>
ZorazeAli's avatar
ZorazeAli committed
146
<li>New <b>...FailSafe ()</b> variants of the <b> Config </b> is used to connect PDCP TraceSources of eNB and UE in <b>RadioBearerStatsConnector</b> class. It is required for the simulations using RLC SM where PDCP objects are not created for data radio bearers.</li>
ZorazeAli's avatar
ZorazeAli committed
147
<li><b>T310</b> timer in <b>LteUeRrc</b> class is stopped if the UE receives <b>RRCConnectionReconfiguration</b> including the <b>mobilityControlInfo</b>. This change is introduced following the 3GPP standard TS36331 sec 5.3.5.4.</li>
148
149
150
151
152
153
<li>The wifi <b>High Latency tags</b> have been removed.  The only rate manager (Onoe) that was making use of them has been refactored.</li>
<li>The wifi <b>MIMO diversity model</b> has been changed to better fit with MRC theory for AWGN channels when STBC is not used (since STBC is currently not supported).</li>
<li> The <b>BuildingsHelper::MakeMobilityModelConsistent()</b> method is deprecated in favor of MobilityBuildingInfo::MakeConsistent</li>
<li> The <b>MobilityBuildingInfo::IsOutdoor ()</b> method is deprecated; use the result of IsIndoor() method instead</li>
<li> IsEqual() methods of class <b>Ipv4Address, Ipv4Mask, Ipv6Address, and Ipv6Prefix</b> are deprecated.</li>
<li> The API around the <b>wifi Txop class</b> was refactored.</li>
154
155
156
</ul>
<h2>Changes to build system:</h2>
<ul>
157
<li>The <b>--lcov-report</b> option to Waf was fixed, and a new <b>--lcov-zerocounters</b> option was added to improve support for lcov.</li>
158
<li>Python bindings were enabled for <b>netanim</b>.</li>
159
160
161
</ul>
<h2>Changed behavior:</h2>
<ul>
162
163
164
<li> The <b>EmpiricalRandomVariable</b> no longer linearly interpolates between values by default, but instead will default to treating the CDF as a histogram and return one of the specific inputs.  The previous interpolation mode can be configured by an attribute.</li>
<li> (as reported above) previously the <b>Config::Connect</b> and <b>Config::Set</b> families of functions would fail silently if the attribute or trace source didn't exist on the path given (typically due to spelling errors). Now those functions will throw a fatal error.  If you need the old behavior use the new  <b>...FailSafe ()</b> variants.</li>
<li> Attempting to deserialize an enum name which wasn't registered with <b>MakeEnumChecker</b> now causes a fatal error, rather failing silently. (This can be triggered by setting an enum Attribute from a StringValue.)</li>
165
166
167
168
169
<li> As a result of the above API changes in <b> MobilityBuildingInfo </b> 
and <b> BuildingsHelper </b> classes, a building aware pathloss models, e.g., 
<b> HybridBuildingsPropagationLossModel </b> is now able to accurately compute 
the pathloss for a node moving in and out of buildings in a simulation. See <a href=https://gitlab.com/nsnam/ns-3-dev/issues/80>issue 80</a> 
for discussion.</li>
170
171
<li> The implementation of the <b>Wi-Fi channel access</b> functions has been improved
to make them more conformant to the IEEE 802.11-2016 standard. Concerning the DCF,
172
173
174
175
the backoff procedure is no longer invoked when a packet is queued for transmission
and the medium has not been idle for a DIFS, but it is invoked if the medium is busy
or does not remain idle for a DIFS after the packet has been queued. Concerning the
EDCAF, tranmissions are now correctly aligned at slot boundaries.</li>
176
<li> Various wifi physical layer behavior around channel occupancy calculation, phy state calculation, and handling different channel widths has been updated.</li>
177
178
</ul>

179
180
181
182
<hr>
<h1>Changes from ns-3.29 to ns-3.30</h1>
<h2>New API:</h2>
<ul>
183
<li>Added the attribute <b>Release</b> to the class <b>EpsBearer</b>, to select the release (e.g., release 15)</li>
184
<li>The attributes <b>RegularWifiMac::HtSupported</b>, <b>RegularWifiMac::VhtSupported</b>, <b>RegularWifiMac::HeSupported</b>, <b>RegularWifiMac::RifsSupported</b>, <b>WifiPhy::ShortGuardEnabled</b>, <b>WifiPhy::GuardInterval</b> and <b>WifiPhy::GreenfieldEnabled</b> have been deprecated. Instead, it is advised to use <b>WifiNetDevice::HtConfiguration</b>, <b>WifiNetDevice::VhtConfiguration</b> and <b>WifiNetDevice::HeConfiguration</b>.</li>
185
<li>The attributes <b>{Ht,Vht,He}Configuration::{Vo,Vi,Be,Bk}MaxAmsduSize</b> and <b>{Ht,Vht,He}Configuration::{Vo,Vi,Be,Bk}MaxAmpduSize</b> have been removed. Instead, it is necessary to use <b>RegularWifiMac::{VO, VI, BE, BK}_MaxAmsduSize</b> and <b>RegularWifiMac::{VO, VI, BE, BK}_MaxAmpduSize</b>.</li>
186
187
188
189
190
<li>A new attribute <b>WifiPhy::PostReceptionErrorModel</b> has been added to force specific packet drops.</li>
<li>A new attribute <b>WifiPhy::PreambleDetectionModel</b> has been added to decide whether PHY preambles are successfully detected.</li>
<li>New attributes <b>QosTxop::AddBaResponseTimeout</b> and <b>QosTxop::FailedAddBaTimeout</b> have been added to set the timeout to wait for an ADDBA response after the ACK to the ADDBA request is received and to set the timeout after a failed BA agreement, respectively.</li>
<li>A new attribute <b>QosTxop::UseExpliciteBarAfterMissedBlockAck</b> has been added to specify whether explicit Block Ack Request should be sent upon missed Block Ack Response.</li>
<li>Added a new trace source <b>EndOfHePreamble</b> in WifiPhy for tracing end of preamble (after training fields) for received 802.11ax packets.</li>
191
192
<li>Added a new helper method to SpectrumWifiPhyHelper and YansWifiPhyHelper to set the <b>frame capture model</b>.</li>
<li>Added a new helper method to SpectrumWifiPhyHelper and YansWifiPhyHelper to set the <b>preamble detection model</b>.</li>
193
<li>Added a new helper method to WifiPhyHelper to disable the preamble detection model.</li>
194
<li>Added a method to ObjectFactory to check whether a TypeId has been configured on the factory.</li>
195
196
197
198
199
200
201
<li>Added a new helper method to WifiHelper to set the <b>802.11ax OBSS PD spatial reuse algorithm</b>.</li>
<li>Added the <b>Cobalt queuing discipline</b>.</li>
<li>Added <b>Simulator::GetEventCount ()</b> to return the number of events executed.</li> 
<li>Added <b>ShowProgress</b> object to display simulation progress statistics.</li>
<li>Add option to disable explicit Block Ack Request when a Block Ack Response is missed.</li>
<li>Add API to be able to tag a subset of bytes in an ns3::Packet.</li>
<li>New LTE helper API has been added to allow users to configure LTE backhaul links with any link technology, not just point-to-point links.</li>
202
203
204
</ul>
<h2>Changes to existing API:</h2>
<ul>
205
  <li>
206
    Added the possibility of setting the z coordinate for many position-allocation classes: <b>GridPositionAllocator, RandomRectanglePositionAllocator, RandomDiscPositionAllocator, UniformDiscPositionAllocator</b>.
207
  </li>
208
  <li>
209
210
    The WifiPhy attribute <b>CcaMode1Threshold</b> has been renamed to <b>CcaEdThreshold</b>, 
    and the WifiPhy attribute <b>EnergyDetectionThreshold</b> has been replaced by a new attribute called <b>RxSensitivity</b>.
211
  </li>
212
213
214
215
  <li>
    It is now possible to know the size of the SpectrumValue underlying std::vector, as well as
    accessing read-only every element of it.
  </li>
216
  <li>
217
    The <b>GetClosestSide</b> method of the Rectangle class returns the correct closest side also for positions outside the rectangle.
218
  </li>
219
  <li> The trace sources <b>BackoffTrace</b> and <b>CwTrace</b> were moved from class QosTxop to base class Txop, allowing these values to be traced for DCF operation.  In addition, the trace signature for BackoffTrace was changed from TracedValue to TracedCallback (callback taking one argument instead of two).  Most users of CwTrace for QosTxop configurations will not need to change existing programs, but users of BackoffTrace will need to adjust the callback signature to match.
Tom Henderson's avatar
Tom Henderson committed
220
  </li>
221
  <li> New trace sources, namely <b>DrbCreated, Srb1Created and DrbCreated</b> have beed implemented in LteEnbRrc and LteUeRrc classes repectively. These new traces are used to improve the connection of the RLC and PDCP stats in the RadioBearerStatsConnector API.
222
  </li>
223
  <li> <b>TraceFadingLossModel</b> has been moved from lte to spectrum module.
224
  </li>
225
226
227
</ul>
<h2>Changes to build system:</h2>
<ul>
228
  <li><b>ns-3 now only supports Python 3</b>.  Use of Python 2 can be forced using the --with-python option provided to './waf configure', and may still work for many cases, but is no longer supported.  Waf does not default to Python 3 but the ns-3 wscript will default the build to Python 3.
229
230
  </li>
  <li>Waf upgraded from 2.0.9 to 2.0.18.
Tom Henderson's avatar
Tom Henderson committed
231
232
233
  </li>
  <li> Options to run a program through Waf without invoking a project rebuild have been added.  The command './waf --run-no-build <program-name>' parallels the behavior of './waf --run <program-name>' and, likewise, the command './waf --pyrun-no-build' parallels the behavior of './waf --pyrun <program-name>'.
  </li>
234
235
236
</ul>
<h2>Changed behavior:</h2>
<ul>
237
  <li>The wifi ADDBA handshake process is now protected with the use of two timeouts who makes sure we do not end up in a blocked situation. If the handshake process is not established, packets that are in the queue are sent as normal MPDUs. Once handshake is successfully established, A-MPDUs can be transmitted.</li>
238
239
240
241
  <li> In the wifi module, the default value of the <b>Margin</b> attribute in SimpleFrameCaptureModel was changed from 10 to 5 dB.</li>
  <li> A <b>ThresholdPreambleDetectionModel</b> is added by default to the WifiPhy.  Using default values, this model will discard frames that fall below either -82 dBm RSSI or below 4 dB SNR.  Users may notice that weak wifi signals that were successfully received based on the error model alone (in previous ns-3 releases) are no longer received.  Previous behavior can be obtained by lowering both threshold values or by removing the preamble detection model (via WifiPhyHelper::DisablePreambleDetectionModel()).</li>
  <li>The PHY model for Wi-Fi has been extended to handle reception of L-SIG and reception of non-legacy header differently.</li>
  <li>LTE/EPC model has been enhanced to allow the simulation user to test more realistic topologies related to the core network:</li>
Manuel Requena's avatar
Manuel Requena committed
242
243
244
245
246
247
248
249
250
251
252
253
254
255
    <ul>
      <li>SGW, PGW and MME are full nodes.</li>
      <li>There are P2P links between core network nodes.</li>
      <li>New S5 interface between SGW and PGW nodes based on GTPv2-C protocol.</li>
      <li>Allow simulations with multiple SGWs and PGWs.</li>
    </ul>
  </li>
  <li>LTE eNB RRC is extended to support:</li>
    <ul>
      <li>S1 signalling with the core network is initiated after the RRC connection establishment procedure is finished.</li>
      <li>New ATTACH_REQUEST state to wait for finalization of the S1 signalling with the core network.</li>
      <li>New InitialContextSetupRequest primitive of the S1 SAP that is received by the eNB RRC when the S1 signalling from the core network is finished.</li>
    </ul>
  </li>
256
257
258
  <li> A new buffer has been introduced in the LteEnbRrc class. This buffer will be used by a target eNB during handover to buffer the packets comming from a source eNB on X2 inteface. The target eNB will buffer this data until it receives RRC Connection Reconfiguration Complete from a UE.
  </li>
  <li> The default qdisc installed on single-queue devices (such as PointToPoint, Csma and Simple) is now <b>FqCoDel</b> (instead of PfifoFast). On multi-queue devices (such as Wifi), the default root qdisc is now <b>Mq</b> with as many FqCoDel child qdiscs as the number of device queues. The new defaults are motivated by the willingness to align with the behavior of major Linux distributions and by the need to preserve the effectiveness of Wifi EDCA Functions in differentiating Access Categories (see issue #35).</li>
259
  <li>LTE RLC TM mode does not report anymore the layer-to-layer delay, as it misses (by standard) an header to which attach the timestamp tag. Users can switch to the PDCP layer delay measurements, which must be the same.</li>
260
261
  <li> Token Bank Fair Queue Scheduler (ns3::FdTbfqFfMacScheduler) will not anymore schedule a UE, which does not have any RBG left after removng the RBG from its allocation map if the computed TB size is greater than the "budget" computed in the scheduler.
  </li>
262
  <li> LTE module now supports the <b>Radio Link Failure (RLF)</b> functionality. This implementation introduced following key behavioral changes:
263
264
265
266
267
268
269
270
271
    <ul>
      <li> The UE RRC state will not remain in "CONNECTED_NORMALLY" state if the DL control channel SINR is below a set threshold.</li>
      <li> The LTE RRC protocol APIs of UE i.e., LteUeRrcProtocolIdeal, LteUeRrcProtocolReal have been extended to send an ideal (i.e., using SAPs instead to transmitting over the air) UE context remove request to the eNB. Similarly, the eNB RRC protocol APIs, i.e, LteEnbRrcProtocolIdeal and LteEnbRrcProtocolReal have been extended to receive this ideal UE context remove request.</li>
      <li> The UE will not synchronize to a cell whose RSRP is less than -140 dBm.</li>
      <li> The non-contention based preambles during a handover are re-assigning to an UE only if it has not been assign to another UE (An UE can be using the preamble even after the expiryTime duration).</li>
      <li> The RachConfigCommon structure in LteRrcSap API has been extended to include "TxFailParam". This new field would enable an eNB to indicate how many times T300 timer can expire at the UE. Upon reaching this count, the UE aborts the connection establishment, and performs the cell selection again. See TS 36.331 5.3.3.6. </li>
      <li> The timer T300 in LteUeRrc class is now bounded by the standard min and max values defined in 3GPP TS 36.331.</li>
    </ul>
  </li>
272
273
</ul>

274
<hr>
275
<h1>Changes from ns-3.28 to ns-3.29</h1>
276
<h2>New API:</h2>
277
<ul>
278
  <li> CommandLine can now handle non-option (positional) arguments. </li>
279
280
  <li> Added CommandLine::Parse (const std::vector<std::string>> args) </li>
  <li> NS_LOG_FUNCTION can now log the contents of vectors </li>
281
282
  <li> A new position allocator has been added to the buildings module, allowing
nodes to be placed outside of buildings defined in the scenario.</li>
283
284
  <li> The Hash() method has been added to the QueueDiscItem class to compute the
    hash of various fields of the packet header (depending on the packet type).</li>
285
  <li> Added a priority queue disc (PrioQueueDisc).</li>
286
287
  <li> Added 3GPP HTTP model
  <li> Added TCP PRR as recovery algorithm
288
  <li> Added a new trace source in StaWifiMac for tracing beacon arrivals</li>
289
  <li> Added a new helper method to ApplicationContainer to start applications with some jitter around the start time</li>
290
291
  <li> (network) Add a method to check whether a node with a given ID is within a NodeContainer.</li>

292
293
294
</ul>
<h2>Changes to existing API:</h2>
<ul>
295
  <li>TrafficControlHelper::Install now only includes root queue discs in the returned
296
297
298
    QueueDiscContainer.</li>
  <li>Recovery algorithms are now in a different class, instead of being tied to TcpSocketBase.
    Take a look to TcpRecoveryOps for more information.</li>
299
300
301
302
303
304
305
306
307
308
309
310
311
  <li>The Mode, MaxPackets and MaxBytes attributes of the Queue class, that had been deprecated in favor of the MaxSize attribute in ns-3.28, have now been removed and cannot be used anymore. Likewise, the methods to get/set the old attributes have been removed as well.  Commands such as:
<pre>
  Config::SetDefault ("ns3::QueueBase::MaxPackets", UintegerValue (4));
</pre>
should now be written as:
<pre>
  Config::SetDefault ("ns3::QueueBase::MaxSize", QueueSizeValue (QueueSize (QueueSizeUnit::PACKETS, 4)));
</pre>
or with a string value with 'b' (bytes) or 'p' (packets) suffix, such as:
<pre>
  Config::SetDefault ("ns3::QueueBase::MaxSize", StringValue ("4p"));
</pre>
  </li>
312
313
314
315
316
  <li>The Limit attribute of the PfifoFastQueueDisc class, that had been deprecated in favor of the MaxSize attribute in ns-3.28, has now been removed and cannot be used anymore. Likewise, the methods to get/set the old Limit attribute have been removed as well. The GetMaxSize/SetMaxSize methods of the base QueueDisc class must be used instead.</li>
  <li>The Mode, MaxPackets and MaxBytes attributes of the CoDelQueueDisc class, that had been deprecated in favor of the MaxSize attribute in ns-3.28, have now been removed and cannot be used anymore. Likewise, the methods to get/set the old attributes have been removed as well. The GetMaxSize/SetMaxSize methods of the base QueueDisc class must be used instead.</li>
  <li>The PacketLimit attribute of the FqCoDelQueueDisc class, that had been deprecated in favor of the MaxSize attribute in ns-3.28, has now been removed and cannot be used anymore. Likewise, the methods to get/set the old PacketLimit attribute have been removed as well. The GetMaxSize/SetMaxSize methods of the base QueueDisc class must be used instead.</li>
  <li>The Mode and QueueLimit attributes of the PieQueueDisc class, that had been deprecated in favor of the MaxSize attribute in ns-3.28, have now been removed and cannot be used anymore. Likewise, the methods to get/set the old attributes have been removed as well. The GetMaxSize/SetMaxSize methods of the base QueueDisc class must be used instead.</li>
  <li>The Mode and QueueLimit attributes of the RedQueueDisc class, that had been deprecated in favor of the MaxSize attribute in ns-3.28, have now been removed and cannot be used anymore. Likewise, the methods to get/set the old attributes have been removed as well. The GetMaxSize/SetMaxSize methods of the base QueueDisc class must be used instead.</li>
Tom Henderson's avatar
Tom Henderson committed
317
  <li> Several traffic generating applications have additional trace sources that export not only the transmitted or received packet but also the source and destination addresses.</li>
318
  <li>The returned type of <b>GetNDevices</b> methods in <b>Channel</b> and subclasses derived from it were changed from uint32_t to std::size_t. Likewise, the input parameter type of <b>GetDevice</b> in <b>Channel</b> and its subclasses were changed from uint32_t to std::size_t.</li>
319
  <li>Wifi classes <b>DcfManager</b>, <b>DcaTxop</b> and <b>EdcaTxopN</b> were renamed to <b>ChannelAccessManager</b>, <b>Txop</b> and <b>QosTxop</b>, respectively.</li>
320
321
322
  <li>QueueDisc::DequeuePeeked has been merged into QueueDisc::Dequeue and hence no longer exists.</li>
  <li>The QueueDisc base class now provides a default implementation of the DoPeek private method
  based on the QueueDisc::PeekDequeue method, which is now no longer available.</li>
323
  <li>The QueueDisc::SojournTime trace source is changed from a TracedValue to a TracedCallback; callbacks that hook this trace must provide one ns3::Time argument, not two.</li>
324
325
326
327
328
329
330
331
332
333
  <li>To avoid the code duplication in SingleModelSpectrumChannel and MultiModelSpectrumChannel classes, the attributes MaxLossDb and PropagationLossModel, and the traces PathLoss and TxSigParams are moved to the base class SpectrumChannel. Similarly, the functions AddPropagationLossModel, AddSpectrumPropagationLossModel, SetPropagationDelayModel and GetSpectrumPropagationLossModel are now defined in SpectrumChannel class. Moreover, the TracedCallback signature of LossTracedCallback has been updated from :
  <pre>
   typedef void (* LossTracedCallback) (Ptr&#60;SpectrumPhy&#62 txPhy, Ptr&#60;SpectrumPhy&#62 rxPhy, double lossDb);
  </pre>
   To :
  <pre>
   typedef void (* LossTracedCallback) (Ptr&#60;const SpectrumPhy&#62 txPhy, Ptr&#60;const SpectrumPhy&#62 rxPhy, double lossDb);
  </pre></li>
  <li>For the sake of LTE module API consistency the IPV6 related functions AssignUeIpv6Address and GetUeDefaultGatewayAddress6 are now declared in EpcHelper base class. Thus, these functions are now declared as virtual in the child classes, i.e., EmuEpcHelper and PointToPointEpcHelper.</li>
</ul>
334
335
<h2>Changes to build system:</h2>
<ul>
336
  <li>Waf upgraded from 1.8.19 to 2.0.9, and ns-3 build scripts aligned to the new API.</li>
337
  <li>The '--no32bit-scan' argument is removed from Waf apiscan; generation of ILP32 bindings is now automated from the LP64 bindings.</li>
Tom Henderson's avatar
Tom Henderson committed
338
339
340
  <li> When using on newer compilers, new warnings may trigger build failures.
The --disable-werror flag can be passed to Waf at configuration time to turn
off the Werror behavior.</li>
341
  <li> GTK+3 libraries (including PyGObject, GooCanvas2) are needed for the Pyviz visualizer, replacing GTK+2 libraries.</li>
342
343
344
</ul>
<h2>Changed behavior:</h2>
<ul>
345
346
347
348
  <li>FqCoDelQueueDisc now computes the hash of the packet's 5-tuple to determine
    the flow the packet belongs to, unless a packet filter has been configured.
    The previous behavior is simply obtained by not configuring any packet filter.
    Consequently, the FqCoDelIpv{4,6}PacketFilter classes have been removed.</li>
349
  <li> ARP packets now pass through the traffic control layer, as in Linux. </li>
Tom Henderson's avatar
Tom Henderson committed
350
  <li> The maximum size UDP packet of the UdpClient application is no longer limited to 1500 bytes.</li>
351
  <li> The default values of the <b>MaxSlrc</b> and <b>FragmentationThreshold</b> attributes in WifiRemoteStationManager were changed from 7 to 4 and from 2346 to 65535, respectively.
352
353
</ul>

354
<hr>
355
<h1>Changes from ns-3.27 to ns-3.28</h1>
356
357
<h2>New API:</h2>
<ul>
358
359
  <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>
  <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>
360
  <li> LTE UEs can now use IPv6 to send and receive traffic.</li>
361
362
  <li> UAN module now supports an IP stack.</li>
  <li> Class <b>TcpSocketBase</b> trace source <i>CongestionWindowInflated</i> shows the values with the in-recovery inflation and the post-recovery deflation.
363
  <li> Added a FIFO queue disc (FifoQueueDisc) and the Token Bucket Filter (TbfQueueDisc).</li>
364
365
366
</ul>
<h2>Changes to existing API:</h2>
<ul>
367
  <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>
368
369
  <li> Class <b>LteUeNetDevice</b> MAC address is now a 64-bit address and can be set during construction.</li>
  <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>.
370
371
372
  <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>
  <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>
  <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>
373
374
375
</ul>
<h2>Changes to build system:</h2>
<ul>
376
  <li> The C++ standard used during compilation (default std=c++11) can be now be changed via the CXXFLAGS variable.</li>
377
378
379
</ul>
<h2>Changed behavior:</h2>
<ul>
Sebastien Deronne's avatar
Sebastien Deronne committed
380
381
  <li>All Wi-Fi management frames are now transmitted using the lowest basic rate.</li>
  <li>The Wi-Fi spectrum model now takes into account adjacent channels through OFDM transmit spectrum masks.</li>
382
  <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>
383
  <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>
384
385
</ul>

386
387
388
389
<hr>
<h1>Changes from ns-3.26 to ns-3.27</h1>
<h2>New API:</h2>
<ul>
390
391
<li>Added <code>Vector{2,3}D.GetLength ()</code>.</li>
<li>Overloaded <code>operator+</code> and <code>operator-</code> for <code>Vector{2,3}D</code>.</li>
392
<li>Added iterator version of WifiHelper::Install() to install Wi-Fi devices on range of nodes.</li>
393
<li>Added a new attribute in TcpSocketBase to track the advertised window.</li>
Ankit Deepak's avatar
Ankit Deepak committed
394
395
<li>Included the model of <b>TCP Ledbat</b>.</li>
<li>Included the TCP SACK-based loss recovery algorithm outlined in RFC 6675.</li>
396
397
<li>Added <b>TCP SACK</b> and the <b>SACK emulation</b>. Added an Attribute to TcpSocketBase class,
    called "Sack", to enable or disable the SACK option usage.</li>
Alexander Krotov's avatar
Alexander Krotov committed
398
<li>In 'src/wifi', several changes were made to enable partial <b>802.11ax</b> High Efficiency (HE) support:
399
400
401
402
    <ul>
      <li>A new standard value has been added that enables the new 11ax data rates.</li>
      <li>A new 11ax preamble has been added.</li>
      <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>
Alexander Krotov's avatar
Alexander Krotov committed
403
      <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 capabilities of the node to other nodes in the network.</li>
404
405
    </ul>
</li>
406
<li> A new class were added for the RRPAA WiFi rate control mechanism.</li>
407
408
409
410
411
412
413
<li>Included carrier aggregation feature in LTE module</li>
    <ul>
      <li>LTE model is extended to support carrier aggregation feature according to 3GPP Release 10, for up to 5 component 
      carriers. </li>
      <li>InstallSingleEnbDevice and InstalSingeUeDevice functions of LteHelper are now constructing LteEnbDevice and LteUeDevice 
      according to CA architecture. Each device, UE and eNodeB contains an instance of component carrier manager, and may 
      have several component carrier instances.</li>
Alexander Krotov's avatar
Alexander Krotov committed
414
      <li>SAP interfaces are extended to include CA message exchange functionality.</li>
415
416
      <li>RRC connection procedure is extended to allow RRC connection reconfiguration for the configuration of the secondary carriers.</li>
      <li>RRC measurement reporting is extended to allow measurement reporting from the secondary carriers.</li>
417
      <li>LTE traces are extended to include component carrier id.</li>
418
419
    </ul>
</li>
420
421
422
423
<li>Function <b>PrintRoutingTable</b> has been extended to add an optional Time::Units
    parameter to specify the time units used on the report.  The new parameter is
    optional and if not specified defaults to the previous behavior (Time::S).
</li>
424
<li><b>TxopTrace</b>: new trace source exported by EdcaTxopN.</li>
425
426
427
428
<li>A <b>GetDscpCounts</b> method is added to <b>Ipv4FlowClassifier</b> and <b>Ipv6FlowClassifier</b>
    which returns a vector of pairs (dscp,count), each of which indicates how many packets with the
    associated dscp value have been classified for a given flow.
</li>
429
430
<li>MqQueueDisc, a multi-queue aware queue disc modelled after the mq qdisc in Linux, has been introduced.
</li>
431
<li>Two new methods, <b>QueueDisc::DropBeforeEnqueue()</b> and <b>QueueDisc::DropAfterDequeue()</b> have
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
    been introduced to replace <b>QueueDisc::Drop()</b>. These new methods require the caller to specify the
    reason why a packet was dropped. Correspondingly, two new trace sources ("DropBeforeEnqueue" and
    "DropAfterDequeue") have been added to the QueueDisc class, providing both the items that were dropped
    and the reason why they were dropped. 
</li>
<li>Added <b>QueueDisc::GetStats()</b> which returns detailed statistics about the operations of
    a queue disc. Statistics can be accessed through the member variables of the returned object and
    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
    dropped/marked for the specified reason (passed as argument). Consequently:
    <ul>
      <li>A number of methods of the QueueDisc class have been removed: <b>GetTotalReceivedPackets()</b>,
      <b>GetTotalReceivedBytes()</b>, <b>GetTotalDroppedPackets()</b>, <b>GetTotalDroppedBytes()</b>,
      <b>GetTotalRequeuedPackets()</b>, <b>GetTotalRequeuedBytes()</b>.</li>
      <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>
      <li>The <b>GetDropOverLimit</b> and <b>GetDropCount</b> methods of <b>CoDelQueueDisc</b> have been removed.
      The values they returned can be obtained by calling, respectively,
      GetStats ().GetNDroppedPackets (CoDelQueueDisc::OVERLIMIT_DROP) and
      GetStats ().GetNDroppedPackets (CoDelQueueDisc::TARGET_EXCEEDED_DROP). The "DropCount" trace of
      <b>CoDelQueueDisc</b> has been removed as well. Packets dropped because the target is exceeded can
      be obtained through the new "DropAfterDequeue" trace of the QueueDisc class.</li>
    </ul>
</li>
<li> The new <b>QueueDisc::Mark()</b> method has been introduced to allow subclasses to request to mark a packet.
     The  caller must specify the reason why the packet must be marked. Correspondingly, a new trace source ("Mark")
     has been added to the QueueDisc class, providing both the items that were marked and the reason why they
     were marked.
458
</li>
459
460
461
<li>A new trace source, <b>SojournTime</b>, is exported by the QueueDisc base class to provide the
    sojourn time of every packet dequeued from a queue disc. This has been made possible by adding a
    timestamp to QueueDiscItem objects, which can be set/get through the new <b>GetTimeStamp()</b> and
462
463
    <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
    have been removed.
464
</li>
465
466
467
</ul>
<h2>Changes to existing API:</h2>
<ul>
468
469
470
471
472
<li><b>ParetoRandomVariable</b> "Mean" attribute has been deprecated, 
    the "Scale" Attribute have to be used instead.
    Changing the Mean attribute has no more an effect on the distribution.
    See the documentation for the relationship between Mean, Scale and Shape. 
</li>
473
474
475
476
477
<li>The default logging timestamp precision has been changed from 6 digits
    to 9 digits, with a fixed format to ensure that 9 digits to the right of
    the decimal point are always printed.  Previously, default C++ iostream
    precision and formatting was used.
</li>
478
479
<li>Abstract base class <b>WifiChannel</b> has been removed. As a result, a Channel type instead of a WifiChannel type
is now exported by WifiNetDevice.</li>
480
481
482
483
<li> The <b>GetPacketSize</b> method of <b>QueueItem</b> has been renamed <b>GetSize</b>
</li>
<li> The <b>DequeueAll</b> method of <b>Queue</b> has been renamed <b>Flush</b>
</li>
484
485
486
487
488
<li>The attributes <b>WifiPhy::TxAntennas</b> and <b>WifiPhy::RxAntennas</b>,
    and the related accessor methods, were replaced by <b>WifiPhy::MaxSupportedTxSpatialStreams</b>
    and <b>WifiPhy::MaxSupportedRxSpatialStreams</b>. A new attribute <b>WifiPhy::Antennas</b>
    was added to allow users to define the number of physical antennas on the device.
</li>
489
490
491
492
493
494
495
496
497
498
499
<li>Sockets do not receive anymore broadcast packets, unless they are bound to an "Any" address (0.0.0.0)
    or to a subnet-directed broadcast packet (e.g., x.y.z.0 for a /24 noterok).
    As in Linux, the following rules are now enforced:
    <ul>
    <li> A socket bound to 0.0.0.0 will receive everything.</li>
    <li> A socket bound to x.y.z.0/24 will receive subnet-directed broadcast (x.y.z.255) and unicast packets.</li>
    <li> A socket bound to x.y.z.w will only receive unicast packets.</li>
    </ul> 
    <b>Previously, a socket bound to an unicast address received also subnet-directed broadcast packets. 
    This is not anymore possible</b>.
</li>
500
501
502
503
504
<li>You can now Bind as many socket as you want to an address/port, provided that they are bound to different NetDevices.
    Moreover, BindToNetDevice does not anymore call Bind. In other terms, Bind and BindToNetDevice can be called
    in any order.
    However, it is suggested to use BindToNetDevice <i>before</i> Bind in order to avoid conflicts.
</li>
505
506
507
</ul>
<h2>Changes to build system:</h2>
<ul>
508
509
<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.
</li>
510
511
<li> Modules can now be located in the 'contrib/' directory in addition to 'src/'
</li>
512
513
<li> Behavior for running Python programs was aligned with that of C++ programs; the list of modules built is no longer printed out.
</li>
514
515
516
</ul>
<h2>Changed behavior:</h2>
<ul>
517
518
519
520
521
522
523
<li><b>MultiModelSpectrumChannel</b> does not call StartRx for receivers that
    operate on subbands orthogonal to transmitter subbands. Models that depend
    on receiving signals with zero power spectral density from orthogonal bands
    may change their behavior.
    See <a href=https://www.nsnam.org/bugzilla/show_bug.cgi?id=2467>bug 2467</a>
    for discussion.
</li>
524
525
526
<li><b>Packet Tag objects</b> are no longer constrained to fit within 21 
    bytes; a maximum size is no longer enforced.
</li>
527
528
  <li> The default value of the <b>TxGain</b> and <b>RxGain</b> attributes in WifiPhy was changed from 1 dB to 0 dB.
  </li>
529
530
  <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.
  </li>
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
<li><b>Queue</b> has been redesigned as a template class object, where the type parameter
    specifies the type of items to be stored in the queue. As a consequence:
    <ul>
      <li>Being a subclass of Queue, <b>DropTailQueue</b> is a template class as well.
      <li>Network devices such as SimpleNetDevice, PointToPointNetDevice and CsmaNetDevice
      use a queue of type Queue&lt;Packet&gt; to store the packets to transmit. The SetQueue
      method of their helpers, however, can still be invoked as, e.g.,
      SetQueue ("ns3::DropTailQueue") instead of, e.g., SetQueue
      ("ns3::DropTailQueue&lt;Packet&gt;").</li>
      <li>The attributes <b>Mode</b>, <b>MaxPackets</b> and <b>MaxBytes</b> are now
      defined by the QueueBase class (which Queue is derived from).</li>
    </ul>
</li>
<li>Queue discs that can operate both in packet mode and byte mode (Red, CoDel, Pie) define their own
    enum QueueDiscMode instead of using QueueBase::QueueMode.
</li>
547
548
<li>The CoDel, PIE and RED queue discs require that the size of the internal queue is the same as
    the queue disc limit (previously, it was allowed to be greater than or equal).
549
550
551
</li>
  <li> The default value of the <b>EnableBeaconJitter</b> attribute in ApWifiMac was changed from false to true.
  </li>
552
553
  <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.
  </li>
554
555
</ul>

556
557
558
559
<hr>
<h1>Changes from ns-3.25 to ns-3.26</h1>
<h2>New API:</h2>
<ul>
560
<li>A <b>SocketPriorityTag</b> is introduced to carry the packet priority. Such a tag
561
562
563
564
565
566
    is added to packets by sockets that support this mechanism (UdpSocketImpl,
    TcpSocketBase and PacketSocket). The base class Socket has a new SetPriority
    method to set the socket priority. When the IPv4 protocol is used, the
    priority is set based on the ToS. See the Socket options section of the
    Network model for more information.
</li>
567
<li>A <b>WifiNetDevice::SelectQueue</b> method has been added to determine the user
568
569
570
571
572
573
574
    priority of an MSDU. This method is called by the traffic control layer before
    enqueuing a packet in the queue disc, if a queue disc is installed on
    the outgoing device, or passing a packet to the device, otherwise. The
    user priority is set to the three most significant bits of the DS field
    (TOS field in case of IPv4 and Traffic Class field in case of IPv6). The
    packet priority carried by the SocketPriorityTag is set to the user priority.
</li>
575
<li>The <b>PfifoFastQueueDisc</b> classifies packets into bands based on their priority.
576
577
578
    See the pfifo_fast queue disc section of the Traffic Control Layer model
    for more information.
</li>
579
580
581
582
583
584
585
586
587
588
589
590
<li>A new class <b>SpectrumWifiPhy</b> has been introduced that makes use of the 
    Spectrum module.  Its functionality and API is currently very similar to that 
    of the YansWifiPhy, especially because it reuses the same InterferenceHelper 
    and ErrorModel classes (for this release).  Some example programs in the 
    'examples/wireless/' directory, such as 'wifi-spectrum-per-example.cc', 
    illustrate how the SpectrumWifiPhy class can be substituted for the default 
    YansWifiPhy PHY model.
</li>
<li>We have added support for generating traces for the
    <a href="https://wilseypa.github.io/desMetrics">DES Metrics</a> project.
    These can be enabled by adding <tt>--enable-des-metrics</tt> at configuration;
    you must also use <tt>CommandLine</tt> in your script.  See the API docs
591
592
593
594
595
596
597
598
    for class <b>DesMetrics</b> for more details.
</li>
<li> The traffic control module now includes the <b>FQ-CoDel</b> and <b>PIE</b> queue disc 
    models, and behavior corresponding to Linux <b>Byte Queue Limits (BQL)</b>.
</li>
<li> Several new TCP congestion control variants were introduced, including
    <b>TCP Vegas, Scalable, Veno, Illinois, Bic, YeAH, and H-TCP</b> 
    congestion control algorithms.
599
</li>
600
601
602
</ul>
<h2>Changes to existing API:</h2>
<ul>
603
604
605
606
607
608
<li><b>SocketAddressTag</b> was a long-standing approach to approximate the POSIX
    socket recvfrom behavior (i.e., to know the source address of a packet) 
    without actually calling RecvFrom.  Experience with this revealed that
    this option was difficult to use with tunnels (the new tag has to 
    replace the old one).  Moreover, there is no real need 
    to create a new API when there is a an existing one (i.e., RecvFrom).
609
610
611
    As a consequence, SocketAddressTag has been completely removed from ns-3.
    Users can use RecvFrom (for UDP), GetPeerName (for TCP), or similar. 
</li>
612
<li><b>InetSockAddress</b> can now store a ToS value, which can be set through its
613
614
615
616
617
    SetTos method. The Bind and Connect methods of UDP (UdpSocketImpl) and
    TCP (TcpSocketBase) sockets set the socket ToS value to the value provided
    through the address input parameter (of type InetSockAddress). See the
    Socket options section of the Network model for more information.
</li>
618
619
620
621
<li>The <b>QosTag</b> is removed as it has been superseded by the SocketPriorityTag.</li>
<li>The <b>Ipv4L3Protocol::DefaultTos</b> attribute is removed.</li>
<li>The attributes <b>YansWifiPhy::Frequency, YansWifiPhy::ChannelNumber, and 
    YansWifiPhy::ChannelWidth</b>, and the related accessor methods, were moved to 
622
623
624
625
626
627
628
629
    base class WifiPhy.  YansWifiPhy::GetChannelFrequencyMhz() was deleted.  
    A new method WifiPhy::DefineChannelNumber () was added to allow users to 
    define relationships between channel number, standard, frequency, and channel width.
</li>
<li>The class <b>WifiSpectrumValueHelper</b> has been refactored; previously it 
    was an abstract base class supporting the WifiSpectrumValue5MhzFactory spectrum 
    model.  It now contains various static member methods supporting the creation 
    of power spectral densities with the granularity of a Wi-Fi OFDM subcarrier 
630
    bandwidth.  The class <b>WifiSpectrumValue5MhzFactory</b> and its API remain but 
631
632
    it is not subclassed.
 </li>
633
<li>A new Wifi method <b>InterferenceHelper::AddForeignSignal</b> has been introduced to 
634
635
636
    support use of the SpectrumWifiPhy (so that non-Wi-Fi signals may be handled 
    as noise power).
</li>
637
<li>A new Wifi attribute <b>Dcf::TxopLimit</b> has been introduced to add support for 802.11e TXOP.
638
</li>
639
640
641
</ul>
<h2>Changes to build system:</h2>
<ul>
642
643
  <li> A new waf build option, <tt>--check-config</tt>, was added to allow users to print the current configuration summary, as appears at the end of ./waf configure.  See bug 2459 for discussion.</li>
  <li> The <tt>configure</tt> summary is now sorted, to make it easier to check the status of optional features.</li>
644
645
646
647
</ul>
<h2>Changed behavior:</h2>
This section is for behavioral changes to the models that were not due to a bug fix.
<ul>
648
  <li>The relationship between Wi-Fi channel number, frequency, channel width, 
649
650
651
652
653
654
655
656
657
      and Wi-Fi standard has been revised (see bug 2412).  Previously, ChannelNumber 
      and Frequency were attributes of class YansWifiPhy, and the frequency was 
      defined as the start of the band.  Now, Frequency has been redefined to be 
      the center frequency of the channel, and the underlying device relies on 
      the pair of frequency and channel width to control behavior; the channel 
      number and Wi-Fi standard are used as attributes to configure frequency 
      and channel width.  The wifi module documentation discusses this change 
      and the new behavior.
  </li>
658
659
660
661
662
  <li>AODV now honors the TTL in RREQ/RREP and it uses a method 
      compliant with <a href="http://www.ietf.org/rfc/rfc3561.txt">RFC 3561</a>.      The node search radius is increased progressively. This could increase 
      slightly the node search time, but it also decreases the network 
      congestion.
  </li>
663
664
</ul>

665
666
667
668
<hr>
<h1>Changes from ns-3.24 to ns-3.25</h1>
<h2>New API:</h2>
<ul>
669
  <li> In 'src/internet/test', a new environment is created to test TCP properties.</li>
Tom Henderson's avatar
Tom Henderson committed
670
671
672
673
674
675
  <li> The 'src/traffic-control' module has been added, with new API for adding and configuring queue discs and packet filters.</li>
  <li> Related to traffic control, a new interface has been added to the
NetDevice to provide a queue interface to access device queue state and
register callbacks used for flow control.</li>
  <li> In 'src/wifi', a new rate control (MinstrelHT) has been added for
802.11n/ac modes.</li>
676
  <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>
677
  <li> It is now possible to use RIPv2 in IPv4 network simulations.</li>
678
679
680
</ul>
<h2>Changes to existing API:</h2>
<ul>
681
682
  <li>TCP-related changes:
    <ul>
Tom Henderson's avatar
Tom Henderson committed
683
684
      <li>Classes TcpRfc793, TcpTahoe, and TcpReno were removed.</li>
      <li>The 'TcpNewReno' log component was effectively replaced by 'TcpCongestionOps'
685
      <li>TCP Hybla and HighSpeed have been added.</li>
686
687
688
      <li>Added the concept of Congestion State Machine inside TcpSocketBase.</li>
      <li>Merged Fast Recovery and Fast Retransmit inside TcpSocketBase.</li>
      <li>Some member variables have been moved from TcpSocketBase inside TcpSocketState. Attributes are not touched.</li>
Alexander Krotov's avatar
Alexander Krotov committed
689
      <li>Congestion control split from TcpSocketBase as subclass of TcpCongestionOps.</li>
690
      <li>Added Rx and Tx callbacks on TcpSocketBase.</li>
691
      <li>Added BytesInFlight trace source on TcpSocketBase. The trace is updated when the implementation requests the value.</li>
692
693
694
      <li>Added attributes about the number of connection and data retransmission attempts.</li>
    </ul>
  </li>
695
  <li> ns-3 is now capable of serializing SLL (a.k.a. cooked) headers.
696
697
       This is used in DCE to allow the generation of pcap directly readable by wireshark.
  </li>
698
699
  <li> In the WifiHelper class in the wifi module, Default has been declared deprecated. This is now immediately handled by the constructor of the class.</li>
  <li> The API for configuring 802.11n/ac aggregation has been modified to be more user friendly. As any MAC layer attributes, aggregation parameters can now also be configured through WifiMacHelper::SetType. </li>
Tom Henderson's avatar
Tom Henderson committed
700
701
702
703
704
705
  <li> The class Queue and subclasses derived from it have been changed in two ways:
  <ul>
    <li>Queues no longer enqueue simple Packets but instead enqueue QueueItem objects, which include Packet but possibly other information such as headers.</li>
    <li>The attributes governing the mode of operation (packets or bytes) and the maximum size have been moved to base class Queue.</li>
  </ul>
  </li>
706
707
  <li> Users of advanced queues (RED, CoDel) who have been using them directly in the NetDevice will need to adjust to the following changes:
    <ul>
Alexander Krotov's avatar
Alexander Krotov committed
708
      <li> RED and CoDel are no longer specializations of the Queue class, 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>
709
710
711
712
      <li> NetDevices still use queues to buffer packets. The only subclass of Queue currently available for this purpose is DropTailQueue. If one wants to approximate the old behavior, one needs to set the DropTailQueue MaxPackets attribute to very low values, e.g., 1.</li>
      <li> The Traffic Control layer features a mechanism by which packets dropped by the NetDevice are requeued in the queue disc (more precisely: if NetDevice::Send returns false, the packet is requeued), so that they are retransmitted later. This means that the MAC drop traces may include packets that have not been actually lost, because they have been dropped by the device, requeued by the traffic control layer and successfully retransmitted. To get the correct number of packets that have been actually lost, one has to subtract the number of packets requeued from the number of packets dropped as reported by the MAC drop trace. </li>
    </ul>
  </li>
713
714
715
</ul>
<h2>Changes to build system:</h2>
<ul>
Tom Henderson's avatar
Tom Henderson committed
716
  <li> Waf was upgraded to 1.8.19</li>
Tom Henderson's avatar
Tom Henderson committed
717
  <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>
718
719
720
721
</ul>
<h2>Changed behavior:</h2>
This section is for behavioral changes to the models that were not due to a bug fix.
<ul>
722
723
724
725
726
727
728
729
730
  <li>TCP behavioral changes:
    <ul>
      <li>TCP closes connection after a number of failed segment retries,
        rather than trying indefinitely. The maximum number of retries, for both SYN
        attempts and data attempts, is controlled by attributes.</li>
      <li>Congestion algorithms not compliant with Fast Retransmit
        and Fast Recovery (TCP 793, Reno, Tahoe) have been removed.</li>
    </ul>
  </li>
731
  <li> 802.11n/ac MPDU aggregation is now enabled by default for both AC_BE and AC_VI.</li>
Tom Henderson's avatar
Tom Henderson committed
732
  <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>
733
734
</ul>

735
736
737
738
<hr>
<h1>Changes from ns-3.23 to ns-3.24</h1>
<h2>New API:</h2>
<ul>
Sebastien Deronne's avatar
Sebastien Deronne committed
739
740
741
742
743
  <li>In 'src/wifi', several changes were made to enable partial 802.11ac support:
    <ul>
      <li>A new helper (VhtWifiMacHelper) was added to set up a Very high throughput (VHT) MAC entity.</li>
      <li>A new standard value has been added that enables the new 11ac data rates.</li>
      <li>A new 11ac preamble has been added.</li>
Alexander Krotov's avatar
Alexander Krotov committed
744
      <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 capabilities of the node to other nodes in the network.</li>
Sebastien Deronne's avatar
Sebastien Deronne committed
745
    </ul>
Tom Henderson's avatar
Tom Henderson committed
746
747
748
749
750
751
752
753
754
755
756
757
  </li>
  <li>The ArpCache API was extended to allow the manual removal of ArpCache entries and the addition of permanent (static) entries for IPv4.
  </li>
  <li> The SimpleChannel in the 'network' module now allows per-NetDevice blacklists, in order to do hidden terminal testcases.
  </li>
</ul>
<h2>Changes to existing API:</h2>
<ul>
  <li> The signatures on several TcpHeader methods were changed to take const arguments.</li>
  <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>
  <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>
  <li> The WifiMode object has been refactored:
Sebastien Deronne's avatar
Sebastien Deronne committed
758
759
760
761
762
763
764
    <ul>
      <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>
      <li>HtWifiMacHelper and VhtWifiMacHelper provide a helper to convert a MCS value into a data rate value.</li>
      <li>The channel width is no longer tied to the wifimode. It is now included in the TXVECTOR.</li>
      <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>
    </ul>
  </li>
765
766
767
</ul>
<h2>Changes to build system:</h2>
<ul>
Tom Henderson's avatar
Tom Henderson committed
768
769
  <li> Waf was upgraded to 1.8.12</li>
  <li> Waf scripts and test.py test runner program were made compatible with Python 3</li>
770
771
772
773
774
775
</ul>
<h2>Changed behavior:</h2>
This section is for behavioral changes to the models that were not due to a bug fix.
<ul>
</ul>

776
777
778
779
<hr>
<h1>Changes from ns-3.22 to ns-3.23</h1>
<h2>New API:</h2>
<ul>
780
781
782
783
784
785
  <li> The mobility module includes a GeographicPositions class used to
convert geographic to cartesian coordinates, and to generate randomly
distributed geographic coordinates.
  </li>
  <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.
  </li>
786
787
788
</ul>
<h2>Changes to existing API:</h2>
<ul>
789
790
  <li> In LteSpectrumPhy, LtePhyTxEndCallback and the corresponding methods have been removed, since they were unused.
  </li>
Tom Henderson's avatar
Tom Henderson committed
791
792
793
794
  <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.
  </li>
  <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.
  </li>
795
796
797
</ul>
<h2>Changes to build system:</h2>
<ul>
Tom Henderson's avatar
Tom Henderson committed
798
  <li> None </li>
799
800
801
802
</ul>
<h2>Changed behavior:</h2>
This section is for behavioral changes to the models that were not due to a bug fix.
<ul>
Alexander Krotov's avatar
Alexander Krotov committed
803
  <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.  Access 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.  
Tom Henderson's avatar
Tom Henderson committed
804
805
806
  </li>
  <li> The mesh module was made more compliant to the IEEE 802.11s-2012 standard and packet traces are now parseable by Wireshark.  
  </li>
807
808
</ul>

809
810
811
812
<hr>
<h1>Changes from ns-3.21 to ns-3.22</h1>
<h2>New API:</h2>
<ul>
813
  <li> New classes were added for the PARF and APARF WiFi power and rate control mechanisms. 
814
815
816
  </li>
  <li> Support for WiFi 802.11n MPDU aggregation has been added.
  </li>
817
  <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. 
818
819
820
  </li>
  <li> A complete LTE release bearer procedure is now implemented which can be invoked by calling the new helper method LteHelper::DeActivateDedicatedEpsBearer ().
  </li>
821
822
823
  <li> It is now possible to print the Neighbor Cache (ARP and NDISC) by using
       the RoutingProtocolHelper
  </li>
824
825
826
827
  <li> A TimeProbe class has been added to the data collection framework in 
       the stats module, enabling TracedValues emitting values of type 
       ns3::Time to be handled by the framework.
  </li>
828
829
830
  <li> A new attribute 'ClockGranularity' was added to the TcpSocketBase class,
to control modeling of RTO calculation.
  </li>
831
832
833
834
</ul>

<h2>Changes to existing API:</h2>
<ul>
Tom Henderson's avatar
Tom Henderson committed
835
836
837
838
839
840
  <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().
  </li>
  <li> Print methods involving routing tables and neighbor caches, in classes Ipv4RoutingHelper and Ipv6RoutingHelper, were converted to static methods.
  </li>  
  <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. 
  </li>
841
842
  <li> WifiPhy::CalculateTxDuration() and WifiPhy::GetPayloadDurationMicroSeconds () now take an additional frequency parameter.
  </li>
843
844
845
  <li> The attribute 'Recievers' in class YansWifiPhy was misspelled, so
       this has been corrected to 'Receivers'.
  </li>
846
847
848
849
  <li> We have now documented the callback function signatures
       for all TracedSources, using an extra (fourth) argument to
       TypeId::AddTraceSource to pass the fully-qualified name
       of the signature typedef.  To ensure that future TraceSources
850
851
       are similarly documented, the three argument version of 
       AddTraceSource has been deprecated.
852
  </li>	
853
854
855
856
857
858
859
  <li> The "MinRTO" attribute of the RttEstimator class was moved to the TcpSocketBase class.  The "Gain" attribute of the RttMeanDeviation class was replaced 
by new "Alpha" and "Beta" attributes.  
  </li>	
  <li> Attributes of the TcpTxBuffer and TcpRxBuffer class are now accessible through the TcpSocketBase class.
  </li>	
  <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. 
  </li>
860
861
862
</ul>

<h2>Changes to build system:</h2>
863
<ul>
864
865
  <li> waf was upgraded to version 1.7.16
  </li>
866
867
868
</ul>

<h2>Changed behavior:</h2>
869
This section is for behavioral changes to the models that were not due to a bug fix.
870
<ul>
871
872
  <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.
  </li>
873
874
  <li> The LrWpanHelper object was previously instantiating only a LogDistancePropagationLossModel on a SingleModelSpectrumChannel, but no PropagationDelayModel.  The constructor now adds by default a ConstantSpeedPropagationDelayModel.
  </li>
875
876
877
  <li> The Nix-vector routing implementation now uses a lazy flush mechanism,
       which dramatically speeds up the creation of large topologies.
  </li>
878
879
</ul>

880
881
882
883
<hr>
<h1>Changes from ns-3.20 to ns-3.21</h1>
<h2>New API:</h2>
<ul>
884
885
  <li> New "const double& SpectrumValue:: operator[] (size_t index) const".
  </li>
886
887
  <li> A new TraceSource has been added to TCP sockets: SlowStartThreshold.
  </li>
Alexander Krotov's avatar
Alexander Krotov committed
888
  <li> New method CommandLine::AddValue (name, attibutePath) to provide a
Peter Barnes's avatar
Peter Barnes committed
889
890
891
892
       shorthand argument "name" for the Attribute "path".  This also has
       the effect of including the help string for the Attribute in the
       Usage message.
  </li>
Piotr Gawlowicz's avatar
Piotr Gawlowicz committed
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
  <li> The GSoC 2014 project in the LTE module has brought some additional APIs:
    <ul>
      <li>a new abstract class LteFfrAlgorithm, which every future
          implementation of frequency reuse algorithm should inherit from</li>
      <li>a new SAPs: one between MAC Scheduler and FrAlgorithm, one between
	  RRC and FrAlgorithm</li>
      <li>new attribute to enable Uplink Power Control in LteUePhy</li>
      <li>new LteUePowerControl class, an implementation of Uplink Power Control, which is 
          configurable by attributes. ReferenceSignalPower is sent by eNB in SIB2. 
          Uplink Power Control in Closed Loop Accumulative Mode is enabled by default</li>
      <li>seven different Frequency Reuse Algorithms (each has its own attributes): </li>
        <ul>
          <li>LteFrNoOpAlgorithm</li>
          <li>LteFrHardAlgorithm</li>
          <li>LteFrStrictAlgorithm</li>
          <li>LteFrSoftAlgorithm</li>
          <li>LteFfrSoftAlgorithm</li>
          <li>LteFfrEnhancedAlgorithm</li>
          <li>LteFfrDistributedAlgorithm</li>
        </ul>
      <li>attribute in LteFfrAlgorithm to set FrCellTypeId which is used in automatic 
          Frequency Reuse algorithm configuration</li>
      <li>LteHelper has been updated with new methods related to frequency reuse algorithm: 
          SetFfrAlgorithmType and SetFfrAlgorithmAttribute</li>
    </ul>
  </li>
919
920
  <li> A new SimpleNetDeviceHelper can now be used to install SimpleNetDevices.
  </li>
921
922
  <li> New PacketSocketServer and PacketSocketClient apps, meant to be used in tests.
  </li>
Tom Henderson's avatar
Tom Henderson committed
923
924
925
926
  <li> Tcp Timestamps and Window Scale options have been added and are enabled by default (controllable by attribute).
  </li>
  <li> A new CoDel queue model has been added to the 'internet' module.  
  </li>
927
928
  <li> New test macros NS_TEST_ASSERT_MSG_GT_OR_EQ() and NS_TEST_EXPECT_MSG_GT_OR_EQ() have been added.
  </li>
929
930
931
932
</ul>

<h2>Changes to existing API:</h2>
<ul>
933
934
  <li> "Icmpv6L4Protocol::ForgeEchoRequest" is now returning a packet with the proper IPv6 header.
  </li>
935
936
937
  <li> The TCP socket Attribute "SlowStartThreshold" has been renamed "InitialSlowStartThreshold" to
       clarify that the effect is only on the initial value.
  </li>
Piotr Gawlowicz's avatar
Piotr Gawlowicz committed
938
939
  <li> all schedulers were updated to interact with FR entity via FFR-SAP. Only PF, PSS, CQA, 
       FD-TBFQ, TD-TBFQ schedulers supports Frequency Reuse functionality. In the beginning 
Alexander Krotov's avatar
Alexander Krotov committed
940
       of scheduling process, schedulers ask FR entity for available RBGs and then ask if UE 
Piotr Gawlowicz's avatar
Piotr Gawlowicz committed
941
942
943
944
945
946
947
948
949
       can be scheduled on RB</li>
  <li> eNB RRC interacts with FFR entity via RRC-FFR SAP</li>
  <li> new DL-CQI generation approach was implemented. Now DL-CQI is computed from control channel as signal
       and data channel (if received) as interference. New attribute in LteHelper was added to specify 
       DL-CQI generation approach. New approach is default one in LteHelper </li>
  <li> RadioEnvironmentMap can be generated for Data or Control channel and for specified RbId;
       Data or Control channel and RbId can be configured by new attributes in RadioEnvironmentMapHelper </li>
  <li> lte-sinr-chunk-processor refactored to lte-chunk-processor. Removed all lte-xxx-chunk-processor 
       implementations</li>
950
951
952
  <li> BindToNetDevice affects also sockets using IPv6.</li>
  <li> BindToNetDevice now calls implicitly Bind (). To bind a socket to a NetDevice and to a specific address,
       the correct sequence is Bind (address) - BindToNetDevice (device). The opposite will raise an error.</li>
953
954
955
956
</ul>

<h2>Changes to build system:</h2>
<ul>
Tom Henderson's avatar
Tom Henderson committed
957
<li> None for this release. </li>
958
959
960
961
</ul>

<h2>Changed behavior:</h2>
<ul>
Tom Henderson's avatar
Tom Henderson committed
962
<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.
963
964
</ul>

965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
<hr>
<h1>Changes from ns-3.19 to ns-3.20</h1>
<h2>New API:</h2>
<ul>
  <li> Models have been added for low-rate, wireless personal area networks
(LR-WPAN) as specified by IEEE standard 802.15.4 (2006).  The current 
emphasis is on the unslotted mode of 802.15.4 operation for use in Zigbee, 
and the scope is limited to enabling a single mode (CSMA/CA) with basic 
data transfer capabilities. Association with PAN coordinators is not yet 
supported, nor the use of extended addressing. Interference is modeled as 
AWGN but this is currently not thoroughly tested.  The NetDevice Tx queue 
is not limited, i.e., packets are never dropped due to queue becoming full. 
They may be dropped due to excessive transmission retries or channel access 
failure.  </li>
  <li> A new IPv6 routing protocol has been added: RIPng. This protocol is
  an Interior Gateway Protocol and it is available in the Internet module. </li>
  <li> A new LTE MAC downlink scheduling algorithm named Channel and QoS 
  Aware (CQA) Scheduler is provided by the new "ns3::CqaFfMacScheduler" object.
  </li>
  <li> Units may be attached to Time objects, to facilitate specific output
  formats (see Time::As()) </li>
  <li> FlowMonitor "SerializeToXml" functions are now directly available
  from the helper.  </li>
  <li> Access to OLSR's HNA table has been enabled </li>
</ul>

<h2>Changes to existing API:</h2>
<ul>
  <li> The SixLowPan model can now use uncompressed IPv6 headers. An option to
  define the minimum compressed packet size has been added.  </li>
  <li> MinDistance wsa replaced by MinLoss in FriisPropagationLossModel, to
  better handle conditions outside of the assumed far field region. </li>
Tom Henderson's avatar
Tom Henderson committed
997
998
  <li> In the DSR model, the attribute DsrOptionRerrHeader::ErrorType" has
  been removed. </li>
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
</ul>

<h2>Changes to build system:</h2>
<ul>
  <li> Python 3.3 is now supported for Python bindings for ns-3.  Python 3.3 
  support for API scanning is not supported.  Python 3.2 is not supported.</li>
  <li>  Enable selection of high precision int64x64_t implementation
  at configure time, for debugging purposes.</li>
  <li> Optimized builds are now enabling signed overflow optimization 
  (-fstrict-overflow) and for gcc 4.8.2 and greater, also warning for cases 
  where an optimizization may occur due to compiler assumption that 
  overflow will not occur. </li>
</ul>

<h2>Changed behavior:</h2>
<ul>
  <li> The Internet FlowMonitor can now track IPv6 packets.  </li>
  <li> Ipv6Extension::m_dropTrace has been removed. Ipv6L3Protocol::m_dropTrace
  is now fired when appropriate.  </li>
  <li> IPv4 identification field value is now dependent on the protocol 
  field.  </li>
  <li> Point-to-point trace sources now contain PPP headers </li>
</ul>

1023
<hr>
1024
1025
<h1>Changes from ns-3.18.1 to ns-3.19</h1>

1026
<h2>New API:</h2>
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
<ul>
  <li> A new wifi extension for vehicular simulation support is available in the
    src/wave directory.  The current code represents an interim capability to 
    realize an IEEE 802.11p-compliant device, but without the WAVE extensions 
    (which are planned for a later patch).  The WaveNetDevice modelled herein 
    enforces that a WAVE-compliant physical layer (at 5.9 GHz) is selected, and 
    does not require any association between devices (similar to an adhoc WiFi 
    MAC), but is otherwise similar (at this time) to a WifiNetDevice.  WAVE 
    capabililties of switching between control and service channels, or using 
    multiple radios, are not yet modelled.
  </li>
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
  <li>New SixLowPanNetDevice class providing a shim between 
    IPv6 and real NetDevices. The new module implements 6LoWPAN:
    "Transmission of IPv6 Packets over IEEE 802.15.4 Networks" (see
    <a href="http://www.ietf.org/rfc/rfc4944.txt">RFC 4944</a> and
    <a href="http://www.ietf.org/rfc/rfc6262.txt">RFC 6262</a>), 
    resulting in a heavy header compression for IPv6 packets.
    The module is intended to be used on 802.15.4 NetDevices, but
    it can be used over other NetDevices. See the manual for
    further discussion.
  </li>
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
  <li> LteHelper has been updated with some new APIs:
    <ul>
      <li>new overloaded Attach methods to enable UE to automatically determine
          the eNodeB to attach to (using initial cell selection);</li>
      <li>new methods related to handover algorithm: SetHandoverAlgorithmType
          and SetHandoverAlgorithmAttribute;</li>
      <li>a new attribute AnrEnabled to activate/deactivate Automatic Neighbour
          Relation (ANR) function; and</li>
      <li>a new method SetUeDeviceAttribute for configuring LteUeNetDevice.</li>
    </ul>
  </li>
  <li> The GSoC 2013 project in the LTE module has brought some additional APIs:
    <ul>
      <li>a new abstract class LteHandoverAlgorithm, which every future
          implementation of automatic handover trigger should inherit from;</li>
      <li>new classes LteHandoverAlgorithm and LteAnr as sub-modules of
          LteEnbNetDevice class; both interfacing with the LteEnbRrc sub-module
          through Handover Management SAP and ANR SAP;</li>
      <li>new attributes in LteEnbNetDevice and LteUeNetDevice classes related
          to Closed Subscriber Group (CSG) functionality in initial cell
          selection;</li>
      <li>new attributes in LteEnbRrc for configuring UE measurements' filtering
          coefficient (i.e., quantity configuration);</li>
      <li>a new public method AddUeMeasReportConfig in LteEnbRrc for setting up
          custom UE measurements' reporting configuration; measurement reports
          can then be captured from the RecvMeasurementReport trace source;
          and</li>
      <li>new trace sources in LteUeRrc to capture more events, such as System
          Information messages (MIB, SIB1, SIB2), initial cell selection, random
          access, and handover.</li>
    </ul>
  </li>
1080
1081
1082
1083
1084
1085
  <li>A new parallel scheduling algorithm based on null messages, a common 
  parallel DES scheduling algorithm, has been added.  The null message 
  scheduler has better scaling properties when running on some scenarios
  with large numbers of nodes since it does not require a global 
  communication.
  </li>
1086
</ul>
1087

1088
1089
<h2>Changes to existing API:</h2>
<ul>
1090
    <li> It is now possible to use Ipv6PacketInfoTag from UDP applications in the
1091
      same way as with Ipv4PacketInfoTag. See Doxygen for current limitations in
1092
  	  using Ipv[4,6]PacketInfoTag to set IP properties.</li>
Nicola Baldo's avatar
merge    
Nicola Baldo committed
1093
    <li>A change is introduced for the usage of the EpcHelper
Nicola Baldo's avatar
Nicola Baldo committed
1094
1095
1096
1097
1098
1099
1100
      class. Previously, the EpcHelper class included both the API
      definition and its (only) implementation; as such, users would
      instantiate and use the EpcHelper class directly in their
      simulation programs. From now on,
      EpcHelper is just the base class defining the API, and the
      implementation has been moved to derived classes; as such,
      users are now expected to use one of the derived classes in
1101
      their simulation program. The implementation previously
Nicola Baldo's avatar
Nicola Baldo committed
1102
1103
      provided by the EpcHelper class has been moved to the new
      derived class PointToPointEpcHelper.</li>
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
  <li> The automatic handover trigger and ANR functions in LTE module have been
    moved from LteEnbRrc class to separate classes. As a result, the related
    attributes, e.g., ServingCellHandoverThreshold, NeighbourCellHandoverOffset,
    EventA2Threshold, and EventA4Threshold have been removed from LteEnbRrc
    class. The equivalent attributes are now in A2A4RsrqHandoverAlgorithm and
    LteAnr classes.</li>
  <li> Master Information Block (MIB) and System Information Block Type 1 (SIB1)
    are now transmitted as LTE control messages, so they are no longer part of
    RRC protocol.</li>
  <li> UE RRC state model in LTE module has been considerably modified and is
    not backward compatible with the previous state model.</li>
1115
1116
1117
1118
  <li> Additional time units (Year, Day, Hour, Minute) were added to the time
  value class that represents simulation time; the largest unit prior to 
  this addition was Second.
  </li>
1119
1120
1121
1122
  <li> SimpleNetDevice and SimpleChannel are not so simple anymore. SimpleNetDevice can be now a
       Broadcast or PointToPoint NetDevice, it can have a limited bandwidth and it uses an output
       queue.       
  </li>
1123
1124
</ul>

1125
1126
1127
<h2>Changes to build system:</h2>

<h2>Changed behavior:</h2>
1128
1129
1130
<ul>
  <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>
  <li> TapBridge device now correctly implements IsLinkUp() method.</li>
1131
  <li> IPv6 addresses and routing tables are printed like in Linux "route -A inet6" command.</li>
1132
1133
1134
1135
1136
  <li> A change in Ipv[4,6]Interface enforces the correct behaviour of IP 
    when a device do not support the minimum MTU requirements.
    This is set to 68 and 1280 octects respectively.  IP simulations that
    may have run over devices with smaller MTUs than 68 or 1280, respectively,
    will no longer be able to use such devices.</li>
1137
</ul>
1138

1139
<hr>
1140
<h1>Changes from ns-3.18 to ns-3.18.1</h1>
1141
1142
<h2>New API:</h2>
<ul>
1143
1144
1145
1146
1147
1148
1149
1150
  <li> It is now possible to randomize the time of the first beacon from an
  access point.  Use an attribute "EnableBeaconJitter" to enable/disable
  this feature.
  </li>
  <li> A new FixedRoomPositionAllocator helper class is available; it
  allows one to generate a random position uniformly distributed in the
  volume of a chosen room inside a chosen building.
  </li>
1151
</ul>
1152

1153
1154
<h2>Changes to existing API:</h2>
<ul>
1155
1156
1157
1158
1159
1160
  <li> Logging wildcards:  allow "***" as synonym for "*=**" to turn on all logging.
  </li>
  <li> The log component list ("NS_LOG=print-list") is now printed alphabetically.
  </li>
  <li> Some deprecated IEEE 802.11p code has been removed from the wifi module
  </li>
1161
</ul>
1162

1163
1164
<h2>Changes to build system:</h2>
<ul>
1165
1166
1167
1168
  <li> The Python API scanning system (./waf --apiscan) has been fixed (bug 1622)
  </li> 
  <li> Waf has been upgraded from 1.7.11 to 1.7.13
  </li> 
1169
</ul>
1170

1171
1172
<h2>Changed behavior:</h2>
<ul>
1173
1174
  <li> Wifi simulations have additional jitter on AP beaconing (see above) and some bug fixes have been applied to wifi module (see RELEASE_NOTES)
  </li> 
1175
1176
</ul>

Tom Henderson's avatar
Tom Henderson committed
1177
1178
1179
1180
1181
<hr>
<h1>Changes from ns-3.17 to ns-3.18</h1>

<h2>New API:</h2>
<ul>
1182
1183
1184
1185
1186
1187
1188
  <li>New features have been added to the LTE module:
  <ul>
    <li>PHY support for UE measurements (RSRP and RSRQ)</li>
    <li>RRC support for UE measurements (configuration, execution, reporting)</li>
    <li>Automatic Handover trigger based on RRC UE measurement reports</li>
  </ul>
  <li>Data collection components have been added in the 'src/stats' module.
1189
1190
1191
1192
      Data collection includes a Probe class that attaches to ns-3 trace
      sources to filter their output, and two Aggregator classes for 
      marshaling probed data into text files or gnuplot plots.  The ns-3
      tutorial has been extended to illustrate basic functionality. </li>
1193
1194
  <li>In 'src/wifi', several changes were made to enable partial 802.11n support:
    <ul>
Sebastien Deronne's avatar
Sebastien Deronne committed
1195
1196
      <li>A new helper (HtWifiMacHelper) was added to set up a High Throughput (HT) MAC entity</li>
      <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>
1197
1198
      <li>A new standard value has been added that enables the new 11n data rates.</li>
      <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>
Alexander Krotov's avatar
Alexander Krotov committed
1199
      <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 capabilities of the node to other nodes in the network</li>
1200
1201
1202
1203
1204
1205
1206
1207
1208
    </ul>
  <li>InternetStackHelper has two new functions:<tt>SetIpv4ArpJitter (bool enable)</tt>
      and <tt>SetIpv6NsRsJitter (bool enable)</tt> to enable/disable
      the random jitter on the tranmission of IPv4 ARP Request and IPv6 NS/RS. </li>
  <li>Bounds on valid time inputs for time attributes can now be enabled.  
      See <tt>attribute-test-suite.cc</tt> for an example.</li>
  <li>New generic hash function interface provided in the simulation core.  
      Two hash functions are provided: murmur3 (default), and the venerable 
      FNV1a.  See the Hash Functions section in the ns-3 manual.</li>
1209
1210
1211
1212
  <li>New Mac16Address has been added. It can be used with IPv6 to make
      an Autoconfigured address.</li>
  <li>Mac64Address support has been extended. It can now be used with 
      IPv6 to make an Autoconfigured address.</li>
1213
  <li>IPv6 can now detect and use Path-MTU. See 
1214
      <tt>examples/ipv6/fragmentation-ipv6-two-MTU.cc</tt> for an example.</li>
1215
  <li>Radvd application has a new Helper. See the updated 
1216
      <tt>examples/ipv6/radvd.cc</tt> for an example.</li>
Tom Henderson's avatar
Tom Henderson committed
1217
1218
1219
1220
</ul>

<h2>Changes to existing API:</h2>
<ul>