CHANGES.html
author Josh Pelkey <jpelkey@gatech.edu>
Wed, 11 Aug 2010 11:37:37 -0400
changeset 6553 fb5ad9c7755a
parent 6529 dd982eaf6026
child 6557 970e1627b308
permissions -rw-r--r--
update release notes and fix doxygen warnings
tomh@3505
     1
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
tomh@3505
     2
<html>
tomh@3505
     3
<head>
tomh@3505
     4
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
tomh@3505
     5
   <title>ns-3 Change Log</title>
tomh@3505
     6
</head>
tomh@3505
     7
<body>
tomh@3505
     8
tomh@3505
     9
<h1>
tomh@3505
    10
ns-3: API and model change history</h1>
tomh@3505
    11
<!--
tomh@3505
    12
This ChangeLog is updated in the reverse order 
tomh@3505
    13
with the most recent changes coming first.  Date format:  DD-MM-YYYY
tomh@3505
    14
-->
tomh@3505
    15
<p>
tomh@3505
    16
ns-3 is an evolving system and there will be API or behavioral changes
tomh@3505
    17
from time to time.   Users who try to use scripts or models across
tomh@3505
    18
versions of ns-3 may encounter problems at compile time, run time, or
tomh@3505
    19
may see the simulation output change.  </p>
tomh@3505
    20
<p>
tomh@3505
    21
We have adopted the development policy that we are going to try to ease
tomh@3505
    22
the impact of these changes on users by documenting these changes in a
tomh@3505
    23
single place (this file), and not by providing a temporary or permanent
tomh@3505
    24
backward-compatibility software layer.  </p>
tomh@3505
    25
<p>
tomh@3505
    26
The goal is that users who encounter a problem when trying to use older
tomh@3505
    27
code with newer code should be able to consult this file to find
tomh@3505
    28
guidance as to how to fix the problem.  For instance, if a method name
tomh@3505
    29
or signature has changed, it should be stated what the new replacement
tomh@3505
    30
name is. </p>
tomh@3505
    31
<p>
tomh@3505
    32
Note that users who upgrade the simulator across versions, or who work
tomh@3505
    33
directly out of the development tree, may find that simulation output
tomh@3505
    34
changes even when the compilation doesn't break, such as when a
tomh@3505
    35
simulator default value is changed.  Therefore, it is good practice for
tomh@3505
    36
_anyone_ using code across multiple ns-3 releases to consult this file,
tomh@3505
    37
as well as the RELEASE_NOTES, to understand what has changed over time.
tomh@3505
    38
</p>
tomh@3505
    39
<p>
tomh@3505
    40
This file is a best-effort approach to solving this issue; we will do
tomh@3505
    41
our best but can guarantee that there will be things that fall through
tomh@3505
    42
the cracks, unfortunately.  If you, as a user, can suggest improvements
tomh@3505
    43
to this file based on your experience, please contribute a patch or drop
tomh@3505
    44
us a note on ns-developers mailing list.  </p>
tomh@3505
    45
tomh@3505
    46
<hr>
tomh@6300
    47
<h1>Changes from ns-3.8 to ns-3.9</h1>
tomh@6300
    48
tomh@6300
    49
<h2>Changes to build system:</h2>
tomh@6300
    50
tomh@6300
    51
<h2>New API:</h2>
tomh@6306
    52
<ul>
gjc@6540
    53
<li><b>Wifi set block ack threshold:</b> Two methods for setting block ack
tomh@6306
    54
parameters for a specific access class: 
tomh@6306
    55
<pre>
tomh@6306
    56
void QosWifiMacHelper::SetBlockAckThresholdForAc (enum AccessClass accessClass, uint8_t threshold);
tomh@6306
    57
void QosWifiMacHelper::SetBlockAckInactivityTimeoutForAc (enum AccessClass accessClass, uint16_t timeout);
tomh@6306
    58
</pre>
gjc@6540
    59
</li>
gjc@6540
    60
<li><b>Receive List Error Model:</b>  Another basic error model that allows
tomh@6306
    61
the user to specify a list of received packets that should be errored.  The
tomh@6306
    62
list corresponds not to the packet UID but to the sequence of received
tomh@6306
    63
packets as observed by the error model.   See src/common/error-model.h
gjc@6540
    64
</li>
gjc@6540
    65
<li><b>Respond to interface events:</b> New attribute for Ipv4GlobalRouting,
tomh@6317
    66
"RespondToInterfaceEvents", which when enabled, will cause global routes
tomh@6317
    67
to be recomputed upon any interface or address notification event from IPv4.
gjc@6540
    68
</li>
gjc@6540
    69
<li><b>Generic sequence number:</b> New generic sequence number class to 
jpelkey@6529
    70
easily handle comparison, subtraction, etc. for sequence numbers.  
jpelkey@6529
    71
To use it you need to supply two fundamental types as template parameters: 
gjc@6540
    72
NUMERIC_TYPE and SIGNED_TYPE.  For instance, <tt>SequenceNumber&lt;uint32_t, int32_t&gt;</tt> 
gjc@6540
    73
gives you a 32-bit sequence number, while <tt>SequenceNumber&lt;uint16_t, int16_t&gt;</tt> 
jpelkey@6529
    74
is a 16-bit one.  For your convenience, these are typedef'ed as 
gjc@6540
    75
<tt>SequenceNumber32</tt> and <tt>SequenceNumber16</tt>, respectively.
gjc@6540
    76
</li>
gjc@6540
    77
gjc@6540
    78
<li><b>Broadcast socket option:</b> New Socket
gjc@6540
    79
methods <tt>SetAllowBroadcast</tt> and <tt>GetAllowBroadcast</tt> add
gjc@6540
    80
to NS-3 <tt>Socket</tt>'s the equivalent to the POSIX SO_BROADCAST
gjc@6540
    81
socket option (setsockopt/getsockopt).  Starting from this NS-3
gjc@6540
    82
version, IPv4 sockets do not allow us to send packets to broadcast
gjc@6540
    83
destinations by default; SetAllowBroadcast must be called beforehand
gjc@6540
    84
if we wish to send broadcast packets.
gjc@6540
    85
</li>
gjc@6540
    86
jpelkey@6529
    87
</ul>
tomh@6300
    88
tomh@6300
    89
<h2>Changes to existing API:</h2>
tomh@6300
    90
deanarm@6360
    91
<ul>
deanarm@6360
    92
<li><b>Changes to construction and naming of Wi-Fi transmit rates:</b>
deanarm@6360
    93
A reorganisation of the construction of Wi-Fi transmit rates has been
deanarm@6360
    94
undertaken with the aim of simplifying the task of supporting further
deanarm@6360
    95
IEEE 802.11 PHYs. This work has been completed under the auspices of
deanarm@6360
    96
Bug 871.
deanarm@6360
    97
deanarm@6360
    98
From the viewpoint of simulation scripts not part of the ns-3
deanarm@6360
    99
distribution, the key change is that WifiMode names of the form
deanarm@6360
   100
wifi<em>x</em>-<em>n</em>mbs are now invalid. Names now take the
deanarm@6360
   101
form <em>Cccc</em>Rate<em>n</em>Mbps[BW<em>b</em>MHz],
deanarm@6360
   102
where <em>n</em> is the root bitrate in megabits-per-second as before
deanarm@6360
   103
(with only significant figures included, and an underscore replacing
deanarm@6360
   104
any decimal point), and <em>Cccc</em> is a representation of the
deanarm@6360
   105
Modulation Class as defined in Table 9-2 of IEEE
deanarm@6360
   106
Std. 802.11-2007. Currently-supported options for <em>Cccc</em>
deanarm@6360
   107
are <em>Ofdm</em> and <em>Dsss</em>. For modulation classes where
deanarm@6360
   108
optional reduced-bandwidth transmission is possible, this is captured
deanarm@6360
   109
in the final part of the form above, with <em>b</em> specifying the
gjc@6540
   110
nominal signal bandwidth in megahertz. </li>
deanarm@6383
   111
deanarm@6383
   112
<li><b>Consolidation of classes support Wi-Fi Information Elements:</b>
deanarm@6383
   113
When the <em>mesh</em> module was introduced it added a class
deanarm@6383
   114
hierarchy for modelling of the various Information Elements that were
deanarm@6383
   115
required. In this release, this class hierarchy has extended by moving
deanarm@6383
   116
the base classes (WifiInformationElement and
deanarm@6383
   117
WifiInformationElementVector) into the <em>wifi</em> module. This
deanarm@6383
   118
change is intended to ease the addition of support for modelling of
gjc@6540
   119
further Wi-Fi functionality. </li>
deanarm@6360
   120
</ul>
deanarm@6360
   121
tomh@6300
   122
<h2>Changed behavior:</h2>
tomh@6300
   123
<ul>
craigdo@6308
   124
<li><b>Queue trace behavior during Enqueue changed:</b> The behavior of the
craigdo@6308
   125
Enqueue trace source has been changed to be more intuitive and to agree with
craigdo@6308
   126
documentation.  Enqueue and Drop events in src/node/queue.cc are now mutually
craigdo@6308
   127
exclusive.  In the past, the meaning of an Enqueue event was that the Queue
craigdo@6308
   128
Enqueue operation was being attempted; and this could be followed by a Drop
craigdo@6308
   129
event if the Queue was full.  The new behavior is such that a packet is either
craigdo@6308
   130
Enqueue'd successfully or Drop'ped.
craigdo@6308
   131
tomh@6300
   132
<li><b>Drop trace logged for Ipv4/6 forwarding failure:</b> Fixed bug 861; this 
tomh@6300
   133
will add ascii traces (drops) in Ipv4 and Ipv6 traces for forwarding failures
tomh@6459
   134
tomh@6459
   135
<li><b>Changed default WiFi error rate model for OFDM modulation types:</b> 
tomh@6459
   136
Adopted more conservative ErrorRateModel for OFDM modulation types (a/g).
tomh@6459
   137
This will require 4 to 5 more dB of received power to get similar results
tomh@6459
   138
as before, so users may observe a reduced WiFi range when using the defaults.
gjc@6540
   139
See tracker issue 944 for more details.
tomh@6300
   140
</ul>
tomh@6300
   141
tomh@6300
   142
<hr>
jpelkey@5933
   143
<h1>Changes from ns-3.7 to ns-3.8</h1>
jpelkey@5933
   144
jpelkey@5933
   145
<h2>Changes to build system:</h2>
jpelkey@5933
   146
jpelkey@5933
   147
<h2>New API:</h2>
jpelkey@6113
   148
amine@6111
   149
<ul>
boyko@6117
   150
<li><b>Matrix propagation loss model:</b> This radio propagation model uses a two-dimensional matrix
jpelkey@6165
   151
of path loss indexed by source and destination nodes.
boyko@6117
   152
amine@6111
   153
<li><b>WiMAX net device</b>: The developed WiMAX model attempts to provide an accurate MAC and
amine@6111
   154
PHY level implementation of the 802.16 specification with the Point-to-Multipoint (PMP) mode and the WirelessMAN-OFDM 
amine@6111
   155
PHY layer. By adding WimaxNetDevice objects to ns-3 nodes, one can create models of
amine@6111
   156
802.16-based networks. The source code for the WiMAX models lives in the directory src/devices/wimax.
amine@6111
   157
The model is mainly composed of three layers:
amine@6111
   158
<ul>
amine@6111
   159
<li>The convergence sublayer (CS)
amine@6111
   160
<li>The MAC Common Part Sublayer (MAC-CPS)
amine@6111
   161
<li>The Physical layer
amine@6111
   162
</ul>
amine@6111
   163
The main way that users who write simulation scripts will typically
amine@6111
   164
interact with the Wimax models is through the helper API and through
amine@6111
   165
the publicly visible attributes of the model.
amine@6111
   166
The helper API is defined in src/helper/wimax-helper.{cc,h}.
amine@6111
   167
Three examples containing some code that shows how to setup a 802.16 network are located under examples/wimax/ 
jpelkey@6113
   168
jpelkey@6113
   169
<li><b>MPI Interface for distributed simulation:</b> Enables access
jpelkey@6113
   170
to necessary MPI information such as MPI rank and size.
jpelkey@6113
   171
jpelkey@6113
   172
<li><b>Point-to-point remote channel:</b> Enables point-to-point 
jpelkey@6113
   173
connection between net-devices on different simulators, for use 
jpelkey@6113
   174
with distributed simulation.
jpelkey@6113
   175
jpelkey@6113
   176
<li><b>GetSystemId in simulator:</b> For use with distributed 
jpelkey@6113
   177
simulation, GetSystemId returns zero by non-distributed 
jpelkey@6113
   178
simulators.  For the distributed simulator, it returns the 
jpelkey@6113
   179
MPI rank.
jpelkey@6165
   180
jpelkey@6165
   181
<li><b>Enhancements to src/core/random-variable.cc/h:</b> New Zeta random variable generator. The Zeta random 
jpelkey@6165
   182
distribution is tightly related to the Zipf distribution (already in ns-3.7). See the documentation, 
jpelkey@6165
   183
especially because sometimes the Zeta distribution is called Zipf and viceversa. Here we conform to the 
jpelkey@6165
   184
Wikipedia naming convention, i.e., Zipf is bounded while Zeta isn't. 
jpelkey@6165
   185
jpelkey@6165
   186
<li><b>Two-ray ground propagation loss model:</b> Calculates the crossover distance under which Friis is used. The antenna 
jpelkey@6165
   187
height is set to the nodes z coordinate, but can be added to using the model parameter SetHeightAboveZ, which 
jpelkey@6165
   188
will affect ALL stations
jpelkey@6165
   189
jpelkey@6165
   190
<li><b>Pareto random variable</b> has two new constructors to specify scale and shape:
jpelkey@6165
   191
<pre>
jpelkey@6165
   192
ParetoVariable (std::pair<double, double> params);
jpelkey@6165
   193
ParetoVariable (std::pair<double, double> params, double b);
jpelkey@6165
   194
</pre>
amine@6111
   195
</ul>
jpelkey@6113
   196
jpelkey@5933
   197
<h2>Changes to existing API:</h2>
jpelkey@5933
   198
<ul>
craigdo@6018
   199
<li><b>Tracing Helpers</b>: The organization of helpers for both pcap and ascii
craigdo@6032
   200
tracing, in devices and protocols, has been reworked.  Instead of each device 
craigdo@6032
   201
and protocol helper re-implementing trace enable methods, classes have been 
craigdo@6032
   202
developed to implement user-level tracing in a consistent way; and device and 
craigdo@6032
   203
protocol helpers use those classes to provide tracing functionality.<br>
craigdo@6018
   204
In addition to consistent operation across all helpers, the object name service
craigdo@6018
   205
has been integrated into the trace file naming scheme.<br>
craigdo@6032
   206
The internet stack helper has been extensively massaged to make it easier to 
craigdo@6032
   207
manage traces originating from protocols.  It used to be the case that there 
craigdo@6032
   208
was essentially no opportunity to filter tracing on interfaces, and resulting
craigdo@6032
   209
trace file names collided with those created by devices.  File names are now
craigdo@6032
   210
disambiguated and one can enable traces on a protocol/interface basis analogously
craigdo@6032
   211
to the node/device granularity of device-based helpers.<br>
craigdo@6018
   212
The primary user-visible results of this change are that trace-related functions
craigdo@6018
   213
have been changed from static functions to method calls; and a new object has
craigdo@6018
   214
been developed to hold streams for ascii traces.<br>
craigdo@6032
   215
New functionality is present for ascii traces.  It is now possible to create
craigdo@6032
   216
multiple ascii trace files automatically just as was possible for pcap trace 
craigdo@6032
   217
files.<br>
craigdo@6018
   218
The implementation of the helper code has been designed also to provide 
craigdo@6018
   219
functionality to make it easier for sophisticated users to hook traces of 
craigdo@6018
   220
various kinds and write results to (file) streams.
craigdo@6018
   221
Before:
craigdo@6018
   222
<pre>
craigdo@6032
   223
  CsmaHelper::EnablePcapAll ();
jpelkey@5933
   224
craigdo@6032
   225
  std::ofstream ascii;
craigdo@6032
   226
  ascii.open ("csma-one-subnet.tr", std::ios_base::binary | std::ios_base::out);
craigdo@6032
   227
  CsmaHelper::EnableAsciiAll (ascii);
craigdo@6032
   228
craigdo@6032
   229
  InternetStackHelper::EnableAsciiAll (ascii);
craigdo@6018
   230
</pre>
craigdo@6018
   231
After:
craigdo@6018
   232
<pre>
craigdo@6032
   233
  CsmaHelper csmaHelper;
craigdo@6032
   234
  InternetStackHelper stack;
craigdo@6032
   235
  csmaHelper.EnablePcapAll ();
craigdo@6018
   236
craigdo@6032
   237
  AsciiTraceHelper ascii;
craigdo@6032
   238
  csma.EnableAsciiAll (ascii.CreateFileStream ("csma-one-subnet.tr"));
craigdo@6032
   239
craigdo@6032
   240
  stack.EnableAsciiIpv4All (stream);
craigdo@6018
   241
</pre>
craigdo@6018
   242
jpelkey@5933
   243
jpelkey@6113
   244
<li><b>Serialization and Deserialization</b> in buffer, nix-vector, 
jpelkey@6113
   245
packet-metadata, and packet has been modified to use raw character 
jpelkey@6113
   246
buffers, rather than the Buffer class
jpelkey@6113
   247
<pre>
jpelkey@6113
   248
+ uint32_t Buffer::GetSerializedSize (void) const;
jpelkey@6113
   249
+ uint32_t Buffer::Serialize (uint8_t* buffer, uint32_t maxSize) const;
jpelkey@6113
   250
+ uint32_t Buffer::Deserialize (uint8_t* buffer, uint32_t size); 
jpelkey@6113
   251
jpelkey@6113
   252
- void NixVector::Serialize (Buffer::Iterator i, uint32_t size) const;
jpelkey@6113
   253
+ uint32_t NixVector::Serialize (uint32_t* buffer, uint32_t maxSize) const;
jpelkey@6113
   254
- uint32_t NixVector::Deserialize (Buffer::Iterator i);
jpelkey@6113
   255
+ uint32_t NixVector::Deserialize (uint32_t* buffer, uint32_t size);
jpelkey@6113
   256
jpelkey@6113
   257
- void PacketMetadata::Serialize (Buffer::Iterator i, uint32_t size) const;
jpelkey@6113
   258
+ uint32_t PacketMetadata::Serialize (uint8_t* buffer, uint32_t maxSize) const;
jpelkey@6113
   259
- uint32_t PacketMetadata::Deserialize (Buffer::Iterator i);
jpelkey@6113
   260
+ uint32_t PacketMetadata::Deserialize (uint8_t* buffer, uint32_t size);
jpelkey@6113
   261
jpelkey@6113
   262
+ uint32_t Packet::GetSerializedSize (void) const;
jpelkey@6113
   263
- Buffer Packet::Serialize (void) const;
jpelkey@6113
   264
+ uint32_t Packet::Serialize (uint8_t* buffer, uint32_t maxSize) const;
jpelkey@6113
   265
- void Packet::Deserialize (Buffer buffer);
jpelkey@6113
   266
+ Packet::Packet (uint8_t const*buffer, uint32_t size, bool magic);
jpelkey@6113
   267
</pre>
jpelkey@6113
   268
<li><b>PacketMetadata uid</b> has been changed to a 64-bit value. The 
jpelkey@6113
   269
lower 32 bits give the uid, while the upper 32-bits give the MPI rank 
jpelkey@6113
   270
for distributed simulations. For non-distributed simulations, the 
jpelkey@6113
   271
upper 32 bits are simply zero.
jpelkey@6113
   272
<pre>
jpelkey@6113
   273
- inline PacketMetadata (uint32_t uid, uint32_t size);
jpelkey@6113
   274
+ inline PacketMetadata (uint64_t uid, uint32_t size);
jpelkey@6113
   275
- uint32_t GetUid (void) const;
jpelkey@6113
   276
+ uint64_t GetUid (void) const;
jpelkey@6113
   277
- PacketMetadata::PacketMetadata (uint32_t uid, uint32_t size);
jpelkey@6113
   278
+ PacketMetadata::PacketMetadata (uint64_t uid, uint32_t size); 
jpelkey@6113
   279
jpelkey@6113
   280
- uint32_t Packet::GetUid (void) const;
jpelkey@6113
   281
+ uint64_t Packet::GetUid (void) const;
jpelkey@6113
   282
</pre>
jpelkey@6165
   283
jpelkey@6165
   284
<li><b>Moved propagation models</b> from src/devices/wifi to src/common
tomh@6184
   285
tomh@6184
   286
<li><b>Moved Mtu attribute from base class NetDevice</b> This attribute is
tomh@6184
   287
now found in all NetDevice subclasses.  
jpelkey@6113
   288
</ul>
jpelkey@6113
   289
jpelkey@6113
   290
<h2>Changed behavior:</h2>
jpelkey@6113
   291
<ul>
jpelkey@6113
   292
jpelkey@6113
   293
</ul>
jpelkey@6113
   294
jpelkey@5933
   295
<hr>
tomh@5497
   296
<h1>Changes from ns-3.6 to ns-3.7</h1>
tomh@5497
   297
mathieu@5526
   298
tomh@5497
   299
<h2>Changes to build system:</h2>
tomh@5497
   300
tomh@5497
   301
<h2>New API:</h2>
tomh@5497
   302
tomh@5497
   303
<ul>
wilsonwk@5858
   304
<li><b>Equal-cost multipath for global routing:</b> Enables quagga's
wilsonwk@5858
   305
equal cost multipath for Ipv4GlobalRouting, and adds an attribute that
wilsonwk@5858
   306
can enable it with random packet distribution policy across equal cost routes.
zarhan@5856
   307
<li><b>Binding sockets to devices:</b> A method analogous to a SO_BINDTODEVICE
mazo@5868
   308
socket option has been introduced to class Socket:  <pre>virtual void Socket::BindToNetDevice (Ptr&lt;NetDevice&gt; netdevice);</pre>
mathieu@5526
   309
<li><b>Simulator event contexts</b>: The Simulator API now keeps track of a per-event
mathieu@5526
   310
'context' (a 32bit integer which, by convention identifies a node by its id). Simulator::GetContext
mathieu@5526
   311
returns the context of the currently-executing event while Simulator::ScheduleWithContext creates an
mathieu@5526
   312
event with a context different from the execution context of the caller. This API is used
sebastien@5814
   313
by the ns-3 logging system to report the execution context of each log line.
mathieu@5526
   314
<li><b>Object::DoStart</b>: Users who need to complete their object setup at the start of a simulation
sebastien@5814
   315
can override this virtual method, perform their adhoc setup, and then, must chain up to their parent.
mazo@5990
   316
<li><b>Ad hoc On-Demand Distance Vector (AODV)</b> routing model, 
boyko@5742
   317
<a href=http://www.ietf.org/rfc/rfc3561.txt>RFC 3561</a> </li>
sebastien@5814
   318
<li><b>Ipv4::IsDestinationAddress (Ipv4Address address, uint32_t iif)</b> Method added to support checks of whether a destination address should be accepted 
sebastien@5814
   319
as one of the host's own addresses.  RFC 1122 Strong/Weak end system behavior can be changed with a new attribute (WeakEsModel) in class Ipv4.  </li>
boyko@5742
   320
sebastien@5814
   321
<li><b>Net-anim interface</b>: Provides an interface to net-anim, a network animator for point-to-point 
sebastien@5814
   322
links in ns-3.  The interface generates a custom trace file for use with the NetAnim program.</li>
sebastien@5814
   323
sebastien@5814
   324
<li><b>Topology Helpers</b>: New topology helpers have been introduced including PointToPointStarHelper, 
sebastien@5814
   325
PointToPointDumbbellHelper, PointToPointGridHelper, and CsmaStarHelper.</li>
sebastien@5814
   326
sebastien@5814
   327
<li><b>IPv6 extensions support</b>: Provides API to add IPv6 extensions and options. Two examples (fragmentation
sebastien@5814
   328
and loose routing) are available.</li>
tomh@5497
   329
</ul>
tomh@5497
   330
guillaume@5507
   331
<h2>Changes to existing API:</h2>
guillaume@5507
   332
<ul>
zarhan@5856
   333
<li><b>Ipv4RoutingProtocol::RouteOutput</b> no longer takes an outgoing 
zarhan@5856
   334
interface index but instead takes an outgoing device pointer; this affects all
zarhan@5856
   335
subclasses of Ipv4RoutingProtocol.
zarhan@5856
   336
<pre>
zarhan@5856
   337
-  virtual Ptr&lt;Ipv4Route&gt; RouteOutput (Ptr&lt;Packet&gt; p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr) = 0;
zarhan@5856
   338
+  virtual Ptr&lt;Ipv4Route&gt; RouteOutput (Ptr&lt;Packet&gt; p, const Ipv4Header &header, Ptr&lt;NetDevice&gt; oif, Socket::SocketErrno &sockerr) = 0;
zarhan@5856
   339
</pre>
zarhan@5856
   340
<li><b>Ipv6RoutingProtocol::RouteOutput</b> no longer takes an outgoing 
zarhan@5856
   341
interface index but instead takes an outgoing device pointer; this affects all
zarhan@5856
   342
subclasses of Ipv6RoutingProtocol.
zarhan@5856
   343
<pre>
zarhan@5856
   344
-  virtual Ptr&lt;Ipv6Route&gt; RouteOutput (Ptr&lt;Packet&gt; p, const Ipv6Header &header, uint32_t oif, Socket::SocketErrno &sockerr) = 0;
zarhan@5856
   345
+  virtual Ptr&lt;Ipv6Route&gt; RouteOutput (Ptr&lt;Packet&gt; p, const Ipv6Header &header, Ptr&lt;NetDevice&gt; oif, Socket::SocketErrno &sockerr) = 0;
zarhan@5856
   346
</pre>
mathieu@5526
   347
<li><b>Application::Start</b> and <b>Application::Stop</b> have been renamed to
mathieu@5526
   348
<b>Application::SetStartTime</b> and <b>Application::SetStopTime</b>.
mathieu@5526
   349
<li><b>Channel::Send</b>: this method does not really exist but each subclass of the Channel
mathieu@5526
   350
base class must implement a similar method which sends a packet from a node to another node.
mathieu@5526
   351
Users must now use Simulator::ScheduleWithContext instead of Simulator::Schedule to schedule
mathieu@5526
   352
the reception event on a remote node.<br>
mathieu@5526
   353
For example, before:
mathieu@5526
   354
<pre>
mathieu@5526
   355
void
mathieu@5526
   356
SimpleChannel::Send (Ptr&lt;Packet&gt; p, uint16_t protocol, 
mathieu@5526
   357
		     Mac48Address to, Mac48Address from,
mathieu@5526
   358
		     Ptr&lt;SimpleNetDevice&gt; sender)
mathieu@5526
   359
{
mathieu@5526
   360
  for (std::vector&lt;Ptr&lt;SimpleNetDevice&gt; &gt;::const_iterator i = m_devices.begin (); i != m_devices.end (); ++i)
mathieu@5526
   361
    {
mathieu@5526
   362
      Ptr&lt;SimpleNetDevice&gt; tmp = *i;
mathieu@5526
   363
      if (tmp == sender)
mathieu@5526
   364
	{
mathieu@5526
   365
	  continue;
mathieu@5526
   366
	}
mathieu@5526
   367
      Simulator::ScheduleNow (&SimpleNetDevice::Receive, tmp, p->Copy (), protocol, to, from);
mathieu@5526
   368
    }
mathieu@5526
   369
}
mathieu@5526
   370
</pre>
mathieu@5526
   371
After:
mathieu@5526
   372
<pre>
mathieu@5526
   373
void
mathieu@5526
   374
SimpleChannel::Send (Ptr&lt;Packet&gt; p, uint16_t protocol, 
mathieu@5526
   375
		     Mac48Address to, Mac48Address from,
mathieu@5526
   376
		     Ptr&lt;SimpleNetDevice&gt; sender)
mathieu@5526
   377
{
mathieu@5526
   378
  for (std::vector&lt;Ptr&lt;SimpleNetDevice&gt; &gt;::const_iterator i = m_devices.begin (); i != m_devices.end (); ++i)
mathieu@5526
   379
    {
mathieu@5526
   380
      Ptr&lt;SimpleNetDevice&gt; tmp = *i;
mathieu@5526
   381
      if (tmp == sender)
mathieu@5526
   382
	{
mathieu@5526
   383
	  continue;
mathieu@5526
   384
	}
mathieu@5526
   385
      Simulator::ScheduleWithContext (tmp->GetNode ()->GetId (), Seconds (0),
mathieu@5526
   386
                                      &SimpleNetDevice::Receive, tmp, p->Copy (), protocol, to, from);
mathieu@5526
   387
    }
mathieu@5526
   388
}
mathieu@5526
   389
</pre>
mathieu@5526
   390
guillaume@5507
   391
<li><b>Simulator::SetScheduler</b>: this method now takes an ObjectFactory
guillaume@5507
   392
instead of an object pointer directly. Existing callers can trivially be
guillaume@5507
   393
updated to use this new method.<br>
guillaume@5507
   394
Before:
guillaume@5507
   395
<pre>
guillaume@5507
   396
Ptr&lt;Scheduler&gt; sched = CreateObject&lt;ListScheduler&gt; ();
guillaume@5507
   397
Simulator::SetScheduler (sched);
guillaume@5507
   398
</pre>
guillaume@5507
   399
After:
guillaume@5507
   400
<pre>
guillaume@5507
   401
ObjectFactory sched;
guillaume@5507
   402
sched.SetTypeId ("ns3::ListScheduler");
guillaume@5507
   403
Simulator::SetScheduler (sched);
guillaume@5507
   404
</pre>
guillaume@5507
   405
boyko@5742
   406
<li> Extensions to IPv4 <b>Ping</b> application: verbose output and the ability to configure different ping 
sebastien@5814
   407
sizes and time intervals (via new attributes)
sebastien@5814
   408
sebastien@5814
   409
<li><b>Topology Helpers</b>: Previously, topology helpers such as a point-to-point star existed in the 
sebastien@5814
   410
PointToPointHelper class in the form of a method (ex: PointToPointHelper::InstallStar).  These topology 
sebastien@5814
   411
helpers have been pulled out of the specific helper classes and created as separate classes.  Several 
sebastien@5814
   412
different topology helper classes now exist including PointToPointStarHelper, PointToPointGridHelper, 
sebastien@5814
   413
PointToPointDumbbellHelper, and CsmaStarHelper.  For example, a user wishes to create a 
sebastien@5814
   414
point-to-point star network:<br>
sebastien@5814
   415
Before:
sebastien@5814
   416
<pre>
sebastien@5814
   417
NodeContainer hubNode;
sebastien@5814
   418
NodeContainer spokeNodes;
sebastien@5814
   419
hubNode.Create (1);
mazo@5868
   420
Ptr&lt;Node&gt; hub = hubNode.Get (0);
sebastien@5814
   421
spokeNodes.Create (nNodes - 1);
sebastien@5814
   422
sebastien@5814
   423
PointToPointHelper pointToPoint;
sebastien@5814
   424
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
sebastien@5814
   425
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));
sebastien@5814
   426
NetDeviceContainer hubDevices, spokeDevices;
sebastien@5814
   427
pointToPoint.InstallStar (hubNode.Get (0), spokeNodes, hubDevices, spokeDevices);
sebastien@5814
   428
</pre>
sebastien@5814
   429
After:
sebastien@5814
   430
<pre>
sebastien@5814
   431
PointToPointHelper pointToPoint;
sebastien@5814
   432
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
sebastien@5814
   433
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));
sebastien@5814
   434
PointToPointStarHelper star (nSpokes, pointToPoint);
sebastien@5814
   435
</pre>
sebastien@5814
   436
sebastien@5814
   437
</li>
boyko@5742
   438
guillaume@5507
   439
</ul>
guillaume@5507
   440
mathieu@5526
   441
<h2>Changed behavior:</h2>
mathieu@5526
   442
<ul>
mathieu@5526
   443
<li> Changed default value of YansWifiPhy::EnergyDetectionThreshold from
mathieu@5526
   444
-140.0 dBm to -96.0 dBm.  Changed default value of 
mathieu@5526
   445
YansWifiPhy::CcaModelThreshold from -140.0 dBm to -99.0 dBm.  Rationale
mathieu@5526
   446
can be found <a href="http://www.nsnam.org/bugzilla/show_bug.cgi?id=689"> 
mathieu@5526
   447
here</a>.
andreev@5817
   448
</li>
andreev@5817
   449
<li> Default TTL of IPv4 broadcast datagrams changed from 1 to 64.</li>
andreev@5817
   450
<li> Changed DcfManager::UpdateBackoff (): using flooring instead of rounding in calculation of remaining slots. <a href="http://www.nsnam.org/bugzilla/show_bug.cgi?id=695">
andreev@5817
   451
  See bug 695.</a></li>
mathieu@5526
   452
</ul>
mathieu@5526
   453
mathieu@5526
   454
guillaume@5507
   455
<hr>
nbaldo@4681
   456
<h1>Changes from ns-3.5 to ns-3.6</h1>
nbaldo@4681
   457
nbaldo@4681
   458
<h2>Changes to build system:</h2>
nbaldo@4681
   459
<ul>
craigdo@5407
   460
<li><b>A new test framework is provided with ns-3.6 that primarilay runs outside waf</b>
craigdo@5407
   461
<p>"./waf check" now runs the new unit tests of the core part of ns-3.6.  
craigdo@5407
   462
In order to run the complete test package, use "./test.py" which is 
craigdo@5407
   463
documented in a new manual -- find it in ./doc/testing.  "./waf check"
craigdo@5407
   464
no longer generates the introspected Doxygen.  Now use "./waf doxygen"
craigdo@5407
   465
to do this and generate the Doxygen documentation in one step.
craigdo@5407
   466
</p>
nbaldo@4681
   467
</ul>
nbaldo@4681
   468
nbaldo@4681
   469
<h2>New API:</h2>
nbaldo@4681
   470
<ul>
vincent@4761
   471
<li><b>Longest prefix match, support for metrics, for Ipv4StaticRouting and Ipv6StaticRouting</b>
zarhan@4747
   472
<p>When performing route lookup, first match for longest prefix, and then
zarhan@4747
   473
based on metrics (default metric = 0).  If metrics are equal, most recent
zarhan@4747
   474
addition is picked.  Extends API for support of metrics but preserves
zarhan@4747
   475
backward compatibility.  One small change is that the default route
zarhan@4747
   476
is no longer stored as index 0 route in the host route table so 
zarhan@4747
   477
GetDefaultRoute () must be used.
zarhan@4747
   478
</p>
zarhan@4747
   479
</li>
zarhan@4745
   480
<li><b>Route injection for global routing</b>
zarhan@4745
   481
<p>Add ability to inject and withdraw routes to Ipv4GlobalRouting.  This
zarhan@4745
   482
allows a user to insert a route and have it redistributed like an OSPF
zarhan@4745
   483
external LSA to the rest of the topology.
zarhan@4745
   484
</p>
zarhan@4745
   485
</li>
boyko@5184
   486
nbaldo@4735
   487
<li><b>Athstats</b>
nbaldo@4735
   488
<p>New classes AthstatsWifiTraceSink and AthstatsHelper.
nbaldo@4735
   489
</p>
nbaldo@4735
   490
</li>
nbaldo@4735
   491
<li><b>WifiRemoteStationManager </b>
nbaldo@4735
   492
<p>New trace sources exported by WifiRemoteStationManager: MacTxRtsFailed, MacTxDataFailed, MacTxFinalRtsFailed and MacTxFinalDataFailed.
nbaldo@4735
   493
</p>
nbaldo@4735
   494
</li>
boyko@5184
   495
vincent@4731
   496
<li><b> IPv6 additions</b>
vincent@4731
   497
<p> Add an IPv6 protocol and ICMPv6 capability.
vincent@4731
   498
<ul>
vincent@4731
   499
<li> new classes Ipv6, Ipv6Interface, Ipv6L3Protocol, Ipv6L4Protocol
vincent@4731
   500
<li> Ipv6RawSocket (no UDP or TCP capability yet)
vincent@4731
   501
<li> a set of classes to implement Icmpv6, including neighbor discovery,
vincent@4731
   502
router solicitation, DAD
vincent@4731
   503
<li> new applications Ping6 and Radvd
vincent@4731
   504
<li> routing objects Ipv6Route and Ipv6MulticastRoute
vincent@4731
   505
<li> routing protocols Ipv6ListRouting and Ipv6StaticRouting
vincent@4731
   506
<li> examples: icmpv6-redirect.cc, ping6.cc, radvd.cc, radvd-two-prefix.cc, simple-routing-ping6.cc
boyko@5184
   507
</ul>
boyko@5184
   508
</p>
boyko@5184
   509
</li> 
boyko@5184
   510
boyko@5184
   511
<li><b>Wireless Mesh Networking models</b>
boyko@5184
   512
<ul>
boyko@5184
   513
<p>
boyko@5184
   514
<li> General multi-interface mesh stack infrastructure (devices/mesh module).
boyko@5184
   515
<li> IEEE 802.11s (Draft 3.0) model including Peering Management Protocol and HWMP.
boyko@5184
   516
<li> Forwarding Layer for Meshing (FLAME) protocol.
boyko@5184
   517
</ul>
boyko@5184
   518
</p>
boyko@5184
   519
</li>
boyko@5184
   520
boyko@5184
   521
<li><b>802.11 enhancements</b>
boyko@5184
   522
<p>
boyko@5184
   523
<ul>
boyko@5184
   524
<li> 10MHz and 5MHz channel width supported by 802.11a model (Ramon Bauza and Kirill Andreev).
boyko@5184
   525
</ul>
Ramon@5189
   526
<ul>
Ramon@5189
   527
<li> Channel switching support. YansWifiPhy can now switch among different channels (Ramon Bauza and Pavel Boyko).
Ramon@5189
   528
</ul>
boyko@5184
   529
</p>
boyko@5184
   530
</li>
boyko@5184
   531
jpelkey@5224
   532
<li><b> Nix-vector Routing</b>
jpelkey@5224
   533
<p> Add nix-vector routing protocol
jpelkey@5224
   534
<ul>
jpelkey@5224
   535
<li> new helper class Ipv4NixVectorHelper
jpelkey@5224
   536
</ul>
jpelkey@5224
   537
<ul>
jpelkey@5224
   538
<li> examples: nix-simple.cc, nms-p2p-nix.cc
jpelkey@5224
   539
</ul> 
jpelkey@5224
   540
</p>
jpelkey@5224
   541
</li>
jpelkey@5224
   542
craigdo@5407
   543
<li><b>New Test Framework</b>
craigdo@5407
   544
<p> Add TestCase, TestSuite classes
craigdo@5407
   545
<ul>
craigdo@5407
   546
<li> examples: src/core/names-test-suite.cc, src/core/random-number-test-suite.cc, src/test/ns3tcp/ns3tcp-cwnd-test-suite.cc
craigdo@5407
   547
</ul> 
craigdo@5407
   548
</p>
craigdo@5407
   549
</li>
craigdo@5407
   550
nbaldo@4681
   551
</ul>
nbaldo@4681
   552
nbaldo@4681
   553
<h2>Changes to existing API:</h2>
nbaldo@4681
   554
<ul>
nbaldo@4681
   555
<li><b>InterferenceHelper</b>
nbaldo@4681
   556
<p>The method InterferenceHelper::CalculateTxDuration (uint32_t size, WifiMode payloadMode, WifiPreamble preamble) has been made static, so that the frame duration depends only on the characteristics of the frame (i.e., the function parameters) and not on the particular standard which is used by the receiving PHY. This makes it now possible to correctly calculate the duration of incoming frames in scenarios in which devices using different PHY configurations coexist in the same channel (e.g., a BSS using short preamble and another BSS using long preamble). </p>
nbaldo@4681
   557
<p> The following member methods have been added to InterferenceHelper:</p>
nbaldo@4681
   558
<pre>
nbaldo@4681
   559
  static WifiMode GetPlcpHeaderMode (WifiMode, WifiPreamble);
nbaldo@4681
   560
  static uint32_t GetPlcpHeaderDurationMicroSeconds (WifiMode, WifiPreamble);
nbaldo@4681
   561
  static uint32_t GetPlcpPreambleDurationMicroSeconds (WifiMode, WifiPreamble);
nbaldo@4681
   562
  static uint32_t GetPayloadDurationMicroSeconds (size, WifiMode); </pre>
nbaldo@4681
   563
<p> The following member methods have been removed from InterferenceHelper:</p>
nbaldo@4681
   564
<pre>
nbaldo@4681
   565
  void Configure80211aParameters (void);
nbaldo@4681
   566
  void Configure80211bParameters (void);
nbaldo@4681
   567
  void Configure80211_10MhzParameters (void);
nbaldo@4681
   568
  void Configure80211_5MhzParameters (void);</pre>
nbaldo@4681
   569
</li>
nbaldo@4681
   570
<li><b>WifiMode</b>
nbaldo@4681
   571
<p>WifiMode now has a WifiPhyStandard attribute which identifies the standard the WifiMode belongs to. To properly set this attribute when creating a new WifiMode, it is now required to explicitly pass a WifiPhyStandard parameter to all WifiModeFactory::CreateXXXX() methods. The WifiPhyStandard value of an existing WifiMode can be retrieved using the new method WifiMode::GetStandard().</p>
nbaldo@4681
   572
</li>
vincent@4764
   573
<li><b>NetDevice</b>
vincent@4764
   574
<p>In order to have multiple link change callback in NetDevice (i.e. to flush ARP and IPv6 neighbor discovery caches), the following member method has been renamed:</p>
vincent@4764
   575
<pre>
vincent@4764
   576
- virtual void SetLinkChangeCallback (Callback&lt;void&gt; callback);
vincent@4764
   577
+ virtual void AddLinkChangeCallback (Callback&lt;void&gt; callback);</pre>
vincent@4764
   578
Now each NetDevice subclasses have a TracedCallback&lt;&gt; object (list of callbacks) instead of Callback&lt;void&gt; ones.
vincent@4764
   579
</li>
nbaldo@4681
   580
</ul>
nbaldo@4681
   581
nbaldo@4681
   582
<hr>
tomh@4385
   583
<h1>Changes from ns-3.4 to ns-3.5</h1>
tomh@4385
   584
tomh@4385
   585
<h2>Changes to build system:</h2>
tomh@4385
   586
<ul>
tomh@4385
   587
</ul>
tomh@4385
   588
tomh@4385
   589
<h2>New API:</h2>
nbaldo@4492
   590
tomh@4385
   591
<ul>
nbaldo@4492
   592
<li><b>YansWifiPhyHelper supporting radiotap and prism PCAP output</b>
nbaldo@4492
   593
<p>The newly supported pcap formats can be adopted by calling the following new method of YansWifiPhyHelper:</p>
nbaldo@4492
   594
<pre>
nbaldo@4492
   595
 +  void SetPcapFormat (enum PcapFormat format);
nbaldo@4492
   596
</pre>
nbaldo@4492
   597
where format is one of PCAP_FORMAT_80211_RADIOTAP, PCAP_FORMAT_80211_PRISM or  PCAP_FORMAT_80211. By default, PCAP_FORMAT_80211 is used, so the default PCAP format is the same as before.</p>
nbaldo@4492
   598
</li>
mathieu@4502
   599
tomh@4475
   600
<li> <b>attributes for class Ipv4</b>
tomh@4475
   601
<p> class Ipv4 now contains attributes in ipv4.cc; the first one
tomh@4475
   602
is called "IpForward" that will enable/disable Ipv4 forwarding.  
tomh@4475
   603
</li>
mathieu@4502
   604
mathieu@4502
   605
<li> <b>packet tags</b>
mathieu@4502
   606
<p>class Packet now contains AddPacketTag, RemovePacketTag and PeekPacketTag 
mathieu@4502
   607
which can be used to attach a tag to a packet, as opposed to the old 
mathieu@4502
   608
AddTag method which attached a tag to a set of bytes. The main 
mathieu@4502
   609
semantic difference is in how these tags behave in the presence of 
mathieu@4502
   610
fragmentation and reassembly.
mathieu@4502
   611
</li>
mathieu@4505
   612
tomh@4385
   613
</ul>
tomh@4385
   614
tomh@4385
   615
<h2>Changes to existing API:</h2>
tomh@4385
   616
<ul>
mathieu@4426
   617
tomh@4572
   618
<li><b>Ipv4Interface::GetMtu () deleted</b>
tomh@4572
   619
  <p>The Ipv4Interface API is private to internet-stack module; this method
ahippo@4639
   620
was just a pass-through to GetDevice ()-&gt;GetMtu ().
tomh@4572
   621
  </p>
tomh@4572
   622
</li>
tomh@4572
   623
tomh@4635
   624
<li><b>GlobalRouteManager::PopulateRoutingTables () and RecomputeRoutingTables () are deprecated </b>
tomh@4635
   625
  <p>This API has been moved to the helper API and the above functions will
tomh@4635
   626
be removed in ns-3.6.  The new API is:
tomh@4635
   627
<pre>
tomh@4635
   628
Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
tomh@4635
   629
Ipv4GlobalRoutingHelper::RecomputeRoutingTables ();
tomh@4635
   630
</pre>
tomh@4635
   631
Additionally, these low-level functions in GlobalRouteManager are now public,
tomh@4635
   632
allowing more API flexibility at the low level ns-3 API:
tomh@4635
   633
<pre>
tomh@4635
   634
GlobalRouteManager::DeleteGlobalRoutes ();
tomh@4635
   635
GlobalRouteManager::BuildGlobalRoutingDatabase ();
tomh@4635
   636
GlobalRouteManager::InitializeRoutes ();
tomh@4635
   637
</pre>
tomh@4635
   638
  </p>
tomh@4635
   639
</li>
tomh@4635
   640
tomh@4568
   641
<li><b>CalcChecksum attribute changes</b>
tomh@4568
   642
  <p>Four IPv4 CalcChecksum attributes (which enable the computation of 
tomh@4568
   643
checksums that are disabled by default) have been collapsed into one global 
tomh@4568
   644
value in class Node.  These four calls: 
tomh@4568
   645
<pre>
tomh@4568
   646
Config::SetDefault ("ns3::Ipv4L3Protocol::CalcChecksum", BooleanValue (true)); 
tomh@4568
   647
Config::SetDefault ("ns3::Icmpv4L4Protocol::CalcChecksum", BooleanValue (true));
tomh@4568
   648
Config::SetDefault ("ns3::TcpL4Protocol::CalcChecksum", BooleanValue (true));
tomh@4568
   649
Config::SetDefault ("ns3::UdpL4Protocol::CalcChecksum", BooleanValue (true));
tomh@4568
   650
</pre>
tomh@4568
   651
are replaced by one call to:
tomh@4568
   652
<pre>
tomh@4568
   653
GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
tomh@4568
   654
</pre>
tomh@4568
   655
  </p>
tomh@4568
   656
</li>
tomh@4568
   657
mathieu@4555
   658
<li><b>CreateObject changes</b>
mathieu@4555
   659
  <p>CreateObject is now able to construct objects with a non-default constructor.
mathieu@4555
   660
   If you used to pass attribute lists to CreateObject, you must now use CreateObjectWithAttributes.
mathieu@4555
   661
  </p>
mathieu@4555
   662
</li>
mathieu@4555
   663
mathieu@4502
   664
<li> <b>packet byte tags renaming</b>
mathieu@4502
   665
  <ul>
mathieu@4502
   666
  <li>Packet::AddTag to Packet::AddByteTag</li>
mathieu@4502
   667
  <li>Packet::FindFirstMatchingTag to Packet::FindFirstMatchingByteTag</li>
mathieu@4502
   668
  <li>Packet::RemoveAllTags to Packet::RemoveAllByteTags</li>
mathieu@4502
   669
  <li>Packet::PrintTags to Packet::PrintByteTags</li>
mathieu@4502
   670
  <li>Packet::GetTagIterator to Packet::GetByteTagIterator</li>
mathieu@4502
   671
  </ul>
mathieu@4502
   672
</li>
mathieu@4502
   673
mathieu@4505
   674
<li><b>YansWifiPhyHelper::EnablePcap* methods not static any more</b>
nbaldo@4492
   675
<p>To accommodate the possibility of configuring the PCAP format used for wifi promiscuous mode traces, several methods of YansWifiPhyHelper had to be made non-static:
nbaldo@4492
   676
<pre>
nbaldo@4492
   677
-  static void EnablePcap (std::string filename, uint32_t nodeid, uint32_t deviceid);
nbaldo@4492
   678
+         void EnablePcap (std::string filename, uint32_t nodeid, uint32_t deviceid);
mazo@5868
   679
-  static void EnablePcap (std::string filename, Ptr&lt;NetDevice&gt; nd);
mazo@5868
   680
+         void EnablePcap (std::string filename, Ptr&lt;NetDevice&gt; nd);
nbaldo@4492
   681
-  static void EnablePcap (std::string filename, std::string ndName);
nbaldo@4492
   682
+         void EnablePcap (std::string filename, std::string ndName);
nbaldo@4492
   683
-  static void EnablePcap (std::string filename, NetDeviceContainer d);
nbaldo@4492
   684
+         void EnablePcap (std::string filename, NetDeviceContainer d);
nbaldo@4492
   685
-  static void EnablePcap (std::string filename, NodeContainer n);
nbaldo@4492
   686
+         void EnablePcap (std::string filename, NodeContainer n);
nbaldo@4492
   687
-  static void EnablePcapAll (std::string filename);
nbaldo@4492
   688
+         void EnablePcapAll (std::string filename);
nbaldo@4492
   689
</pre>
nbaldo@4492
   690
</p>
nbaldo@4492
   691
</li>
nbaldo@4492
   692
nbaldo@4492
   693
<li><b>Wifi Promisc Sniff interface modified </b>
nbaldo@4492
   694
<p> 
nbaldo@4492
   695
To accommodate support for the radiotap and prism headers in PCAP traces, the interface for promiscuos mode sniff in the wifi device was changed. The new implementation was heavily inspired by the way the madwifi driver handles monitor mode. A distinction between TX and RX events is introduced, to account for the fact that different information is to be put in the radiotap/prism header (e.g., RSSI and noise make sense only for RX packets). The following are the relevant modifications to the WifiPhy class:
nbaldo@4492
   696
<pre>
ahippo@4639
   697
-  void NotifyPromiscSniff (Ptr&lt;const Packet&gt; packet);
ahippo@4639
   698
+  void NotifyPromiscSniffRx (Ptr&lt;const Packet&gt; packet, uint16_t channelFreqMhz, uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm);
ahippo@4639
   699
+  void NotifyPromiscSniffTx (Ptr&lt;const Packet&gt; packet, uint16_t channelFreqMhz, uint32_t rate, bool isShortPreamble);
ahippo@4639
   700
-  TracedCallback&lt;Ptr&lt;const Packet&gt; &gt; m_phyPromiscSnifferTrace;
ahippo@4639
   701
+  TracedCallback&lt;Ptr&lt;const Packet&gt;, uint16_t, uint32_t, bool, double, double&gt; m_phyPromiscSniffRxTrace;
ahippo@4639
   702
+  TracedCallback&lt;Ptr&lt;const Packet&gt;, uint16_t, uint32_t, bool&gt; m_phyPromiscSniffTxTrace;
nbaldo@4492
   703
</pre>
nbaldo@4492
   704
The above mentioned callbacks are expected to be used to call the following method to write Wifi PCAP traces in promiscuous mode:
nbaldo@4492
   705
<pre>
ahippo@4639
   706
+  void WriteWifiMonitorPacket(Ptr&lt;const Packet&gt; packet, uint16_t channelFreqMhz, uint32_t rate, bool isShortPreamble, bool isTx, double signalDbm, double noiseDbm);
nbaldo@4492
   707
</pre>
nbaldo@4492
   708
In the above method, the isTx parameter is to be used to differentiate between TX and RX packets. For an example of how to implement these callbacks, see the implementation of PcapSniffTxEvent and PcapSniffRxEvent in src/helper/yans-wifi-helper.cc
nbaldo@4492
   709
</p>
nbaldo@4492
   710
</li>
nbaldo@4492
   711
tomh@4475
   712
<li><b> Routing decoupled from class Ipv4</b>
tomh@4475
   713
<p> All calls of the form "Ipv4::AddHostRouteTo ()" etc. (i.e. to 
tomh@4475
   714
add static routes, both unicast and multicast) have been moved to a new 
tomh@4475
   715
class Ipv4StaticRouting.  In addition, class Ipv4 now holds only
tomh@4475
   716
one possible routing protocol; the previous way to add routing protocols
tomh@4475
   717
(by ordered list of priority) has been moved to a new class Ipv4ListRouting.
tomh@4475
   718
Class Ipv4 has a new minimal routing API (just to set and get the routing
tomh@4475
   719
protocol):
tomh@4475
   720
<pre>
tomh@4475
   721
-  virtual void AddRoutingProtocol (Ptr&lt;Ipv4RoutingProtocol&gt; routingProtocol, int16_t priority) = 0;
tomh@4475
   722
+  virtual void SetRoutingProtocol (Ptr&lt;Ipv4RoutingProtocol&gt; routingProtocol) = 0;
tomh@4475
   723
+  virtual Ptr&lt;Ipv4RoutingProtocol&gt; GetRoutingProtocol (void) const = 0;
tomh@4475
   724
</pre>
tomh@4475
   725
</li>
tomh@4475
   726
tomh@4475
   727
<li><b> class Ipv4RoutingProtocol is refactored</b>
tomh@4475
   728
<p> The abstract base class Ipv4RoutingProtocol has been refactored to
tomh@4475
   729
align with corresponding Linux Ipv4 routing architecture, and has been
tomh@4475
   730
moved from ipv4.h to a new file ipv4-routing-protocol.h.  The new
tomh@4475
   731
methods (RouteOutput () and RouteInput ()) are aligned with Linux 
tomh@4475
   732
ip_route_output() and ip_route_input().  However,
tomh@4475
   733
the general nature of these calls (synchronous routing lookup for
tomh@4475
   734
locally originated packets, and an asynchronous, callback-based lookup
tomh@4475
   735
for forwarded packets) is still the same.
tomh@4475
   736
<pre>
ahippo@4639
   737
-  typedef Callback&lt;void, bool, const Ipv4Route&amp;, Ptr&lt;Packet&gt;, const Ipv4Header&amp;&gt; RouteReplyCallback;
ahippo@4639
   738
+  typedef Callback&lt;void, Ptr&lt;Ipv4Route&gt;, Ptr&lt;const Packet&gt;, const Ipv4Header &amp;&gt; UnicastForwardCallback;
ahippo@4639
   739
+  typedef Callback&lt;void, Ptr&lt;Ipv4MulticastRoute&gt;, Ptr&lt;const Packet&gt;, const Ipv4Header &amp;&gt; MulticastForwardCallback;
ahippo@4639
   740
+  typedef Callback&lt;void, Ptr&lt;const Packet&gt;, const Ipv4Header &amp;, uint32_t &gt; LocalDeliverCallback;
ahippo@4639
   741
+  typedef Callback&lt;void, Ptr&lt;const Packet&gt;, const Ipv4Header &amp;&gt; ErrorCallback;
ahippo@4639
   742
-  virtual bool RequestInterface (Ipv4Address destination, uint32_t&amp; interface) = 0;
ahippo@4639
   743
+  virtual Ptr&lt;Ipv4Route&gt; RouteOutput (Ptr&lt;Packet&gt; p, const Ipv4Header &amp;header, uint32_t oif, Socket::SocketErrno &amp;errno) = 0;
tomh@4475
   744
-  virtual bool RequestRoute (uint32_t interface,
ahippo@4639
   745
-                            const Ipv4Header &amp;ipHeader,
tomh@4475
   746
-                            Ptr&lt;Packet&gt; packet,
tomh@4475
   747
-                            RouteReplyCallback routeReply) = 0;
ahippo@4639
   748
+  virtual bool RouteInput  (Ptr&lt;const Packet&gt; p, const Ipv4Header &amp;header, Ptr&lt;const NetDevice&gt; idev,
tomh@4475
   749
+                             UnicastForwardCallback ucb, MulticastForwardCallback mcb,
tomh@4475
   750
+                             LocalDeliverCallback lcb, ErrorCallback ecb) = 0;
tomh@4475
   751
</pre>
tomh@4475
   752
tomh@4475
   753
</li>
tomh@4475
   754
<li><b> previous class Ipv4Route, Ipv4MulticastRoute renamed; new classes with
tomh@4475
   755
those same names added</b>
tomh@4475
   756
<p> The previous class Ipv4Route and Ipv4MulticastRoute are used by 
tomh@4475
   757
Ipv4StaticRouting and Ipv4GlobalRouting to record internal routing table
tomh@4475
   758
entries, so they were renamed to class Ipv4RoutingTableEntry and
tomh@4475
   759
Ipv4MulticastRoutingTableEntry, respectively.  In their place, new
tomh@4475
   760
class Ipv4Route and class Ipv4MulticastRoute have been added.  These
tomh@4475
   761
are reference-counted objects that are analogous to Linux struct
tomh@4475
   762
rtable and struct mfc_cache, respectively, to achieve better compatibility
tomh@4475
   763
with Linux routing architecture in the future.  
tomh@4475
   764
tomh@4475
   765
<li><b> class Ipv4 address-to-interface mapping functions changed</b>
tomh@4475
   766
<p>  There was some general cleanup of functions that involve mappings
tomh@4475
   767
from Ipv4Address to either NetDevice or Ipv4 interface index.  
tomh@4475
   768
<pre>
tomh@4475
   769
-  virtual uint32_t FindInterfaceForAddr (Ipv4Address addr) const = 0;
tomh@4475
   770
-  virtual uint32_t FindInterfaceForAddr (Ipv4Address addr, Ipv4Mask mask) const = 0;
tomh@4475
   771
+  virtual int32_t GetInterfaceForAddress (Ipv4Address address) const = 0;
tomh@4475
   772
+  virtual int32_t GetInterfaceForPrefix (Ipv4Address address, Ipv4Mask mask) const = 0;
tomh@4475
   773
-  virtual int32_t FindInterfaceForDevice(Ptr&lt;NetDevice&gt; nd) const = 0;
tomh@4475
   774
+  virtual int32_t GetInterfaceForDevice (Ptr&lt;const NetDevice&gt; device) const = 0;
tomh@4475
   775
-  virtual Ipv4Address GetSourceAddress (Ipv4Address destination) const = 0;
tomh@4475
   776
-  virtual bool GetInterfaceForDestination (Ipv4Address dest,
tomh@4475
   777
-  virtual uint32_t GetInterfaceByAddress (Ipv4Address addr, Ipv4Mask mask = Ipv4Mask("255.255.255.255"));
tomh@4475
   778
</pre>
tomh@4475
   779
tomh@4475
   780
<li><b> class Ipv4 multicast join API deleted</b>
tomh@4475
   781
<p> The following methods are not really used in present form since IGMP
tomh@4475
   782
is not being generated, so they have been removed (planned to be replaced
tomh@4475
   783
by multicast socket-based calls in the future):
tomh@4475
   784
tomh@4475
   785
<pre>
tomh@4475
   786
- virtual void JoinMulticastGroup (Ipv4Address origin, Ipv4Address group) = 0;
tomh@4475
   787
- virtual void LeaveMulticastGroup (Ipv4Address origin, Ipv4Address group) = 0;
tomh@4475
   788
</pre>
tomh@4475
   789
tomh@4475
   790
mathieu@4426
   791
<li><b>Deconflict NetDevice::ifIndex and Ipv4::ifIndex (bug 85).</b>
mathieu@4426
   792
<p>All function parameters named "ifIndex" that refer 
tomh@4385
   793
to an Ipv4 interface are instead named "interface".
tomh@4385
   794
<pre>
tomh@4385
   795
- static const uint32_t Ipv4RoutingProtocol::IF_INDEX_ANY = 0xffffffff;
tomh@4385
   796
+ static const uint32_t Ipv4RoutingProtocol::INTERFACE_ANY = 0xffffffff;
tomh@4385
   797
ahippo@4639
   798
- bool Ipv4RoutingProtocol::RequestIfIndex (Ipv4Address destination, uint32_t&amp; ifIndex);
ahippo@4639
   799
+ bool Ipv4RoutingProtocol::RequestInterface (Ipv4Address destination, uint32_t&amp; interface);
tomh@4385
   800
(N.B. this particular function is planned to be renamed to RouteOutput() in the
tomh@4385
   801
proposed IPv4 routing refactoring)
tomh@4385
   802
tomh@4385
   803
- uint32_t Ipv4::GetIfIndexByAddress (Ipv4Address addr, Ipv4Mask mask);
tomh@4385
   804
+ int_32t Ipv4::GetInterfaceForAddress (Ipv4Address address, Ipv4Mask mask) const;
tomh@4385
   805
ahippo@4639
   806
- bool Ipv4::GetIfIndexForDestination (Ipv4Address dest, uint32_t &amp;ifIndex) const;
ahippo@4639
   807
+ bool Ipv4::GetInterfaceForDestination (Ipv4Address dest, uint32_t &amp;interface) const;
tomh@4385
   808
(N.B. this function is not needed in the proposed Ipv4 routing refactoring)
tomh@4385
   809
</pre>
mathieu@4426
   810
mathieu@4426
   811
mathieu@4426
   812
<li><b>Allow multiple IPv4 addresses to be assigned to an interface (bug 188)</b>
mathieu@4426
   813
  <ul>
mathieu@4426
   814
  <li> Add class Ipv4InterfaceAddress:  
mathieu@4426
   815
  This is a new class to resemble Linux's struct in_ifaddr.  It holds IP addressing information, including mask,
mathieu@4426
   816
  broadcast address, scope, whether primary or secondary, etc.
mathieu@4426
   817
  <pre>
tomh@4385
   818
+  virtual uint32_t AddAddress (uint32_t interface, Ipv4InterfaceAddress address) = 0;
tomh@4385
   819
+  virtual Ipv4InterfaceAddress GetAddress (uint32_t interface, uint32_t addressIndex) const = 0;
tomh@4385
   820
+  virtual uint32_t GetNAddresses (uint32_t interface) const = 0;
mathieu@4426
   821
  </pre>
mathieu@4426
   822
  <li>Regarding legacy API usage, typically where you once did the following,
mathieu@4426
   823
  using the public Ipv4 class interface (e.g.):
mathieu@4426
   824
  <pre>
ahippo@4639
   825
  ipv4A-&gt;SetAddress (ifIndexA, Ipv4Address ("172.16.1.1"));
ahippo@4639
   826
  ipv4A-&gt;SetNetworkMask (ifIndexA, Ipv4Mask ("255.255.255.255"));
mathieu@4426
   827
  </pre>
mathieu@4426
   828
  you now do:
mathieu@4426
   829
  <pre>
tomh@4385
   830
  Ipv4InterfaceAddress ipv4IfAddrA = Ipv4InterfaceAddress (Ipv4Address ("172.16.1.1"), Ipv4Mask ("255.255.255.255"));
ahippo@4639
   831
  ipv4A-&gt;AddAddress (ifIndexA, ipv4IfAddrA);
mathieu@4426
   832
  </pre>
mathieu@4426
   833
  <li> At the helper API level, one often gets an address from an interface
mathieu@4426
   834
  container.  We preserve the legacy GetAddress (uint32_t i) but it
mathieu@4426
   835
  is documented that this will return only the first (address index 0)
mathieu@4426
   836
  address on the interface, if there are multiple such addresses. 
mathieu@4426
   837
  We provide also an overloaded variant for the multi-address case: 
tomh@4385
   838
mathieu@4426
   839
  <pre>
tomh@4385
   840
Ipv4Address Ipv4InterfaceContainer::GetAddress (uint32_t i)
tomh@4385
   841
+ Ipv4Address Ipv4InterfaceContainer::GetAddress (uint32_t i, uint32_t j)
mathieu@4426
   842
  </pre>
mk@4413
   843
mathieu@4426
   844
  </ul>
mk@4413
   845
mathieu@4426
   846
<li><b>New WifiMacHelper objects</b>
mathieu@4426
   847
<p>The type of wifi MAC is now set by two new specific helpers, NqosWifiMacHelper for non QoS MACs and QosWifiMacHelper for Qos MACs. They are passed as argument to WifiHelper::Install methods.</li>
mathieu@4426
   848
  <pre>
ahippo@4639
   849
- void WifiHelper::SetMac (std::string type, std::string n0 = "", const AttributeValue &amp;v0 = EmptyAttributeValue (),...)
mk@4413
   850
ahippo@4639
   851
- NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phyHelper, NodeContainer c) const
ahippo@4639
   852
+ NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phyHelper, const WifiMacHelper &amp;macHelper, NodeContainer c) const
mk@4413
   853
ahippo@4639
   854
- NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phy, Ptr&lt;Node&gt; node) const
ahippo@4639
   855
+ NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phy, const WifiMacHelper &amp;mac, Ptr&lt;Node&gt; node) const
mk@4413
   856
ahippo@4639
   857
- NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phy, std::string nodeName) const
ahippo@4639
   858
+ NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phy, const WifiMacHelper &amp;mac, std::string nodeName) const
mathieu@4426
   859
  </pre>
mathieu@4426
   860
  See src/helper/nqos-wifi-mac-helper.h and src/helper/qos-wifi-mac-helper.h for more details.
mathieu@4426
   861
  </p>
mk@4413
   862
mathieu@4426
   863
<li><b>Remove Mac48Address::IsMulticast</b>
mathieu@4426
   864
  <p>This method was considered buggy and unsafe to call. Its replacement is Mac48Address::IsGroup.
mathieu@4426
   865
  </li>
mathieu@4426
   866
tomh@4385
   867
</ul>
tomh@4385
   868
tomh@4385
   869
<h2>Changed behavior:</h2>
tomh@4385
   870
<ul>
tomh@4385
   871
</ul>
tomh@4385
   872
tomh@4385
   873
<hr>
craigdo@4305
   874
<h1>Changes from ns-3.3 to ns-3.4</h1>
mathieu@4260
   875
tomh@4385
   876
<h2>Changes to build system:</h2>
craigdo@4301
   877
<ul>
craigdo@4305
   878
<li>A major option regarding the downloading and building of ns-3 has been
craigdo@4305
   879
added for ns-3.4 -- the ns-3-allinone feature.  This allows a user to
craigdo@4305
   880
get the most common options for ns-3 downloaded and built with a minimum
craigdo@4305
   881
amount of trouble.  See the ns-3 tutorial for a detailed explanation of
craigdo@4305
   882
how to use this new feature.</li>
craigdo@4305
   883
craigdo@4305
   884
<li>The build system now runs build items in parallel by default.  This includes
craigdo@4305
   885
the regression tests.</li>
craigdo@4301
   886
</ul>
craigdo@4301
   887
craigdo@4305
   888
<h2>New API:</h2>
mathieu@4260
   889
<ul>
ahippo@4639
   890
<li>XML support has been added to the ConfigStore in src/contrib/config-store.cc</li>
craigdo@4301
   891
craigdo@4301
   892
<li>The ns-2 calendar queue scheduler option has been ported to src/simulator</li>
craigdo@4301
   893
craigdo@4301
   894
<li>A ThreeLogDistancePropagationLossModel has been added to src/devices/wifi</li>
craigdo@4301
   895
mathieu@4260
   896
<li>ConstantAccelerationMobilityModel in src/mobility/constant-acceleration-mobility-model.h</li>
mathieu@4260
   897
craigdo@4305
   898
<li>A new emulation mode is supported with the TapBridge net device (see
craigdo@4305
   899
src/devices/tap-bridge)</li>
craigdo@4266
   900
craigdo@4305
   901
<li>A new facility for naming ns-3 Objects is included (see
craigdo@4305
   902
src/core/names.{cc,h})</li>
craigdo@4266
   903
craigdo@4301
   904
<li>Wifi multicast support has been added in src/devices/wifi</li>
craigdo@4301
   905
</ul>
craigdo@4301
   906
craigdo@4305
   907
<h2>Changes to existing API:</h2>
mathieu@4260
   908
mathieu@4260
   909
<ul>
craigdo@4305
   910
<li>Some fairly significant changes have been made to the API of the
craigdo@4305
   911
random variable code.  Please see the ns-3 manual and src/core/random-variable.cc
craigdo@4305
   912
for details.</li>
craigdo@4305
   913
craigdo@4305
   914
<li>The trace sources in the various NetDevice classes has been completely
craigdo@4305
   915
reworked to allow for a consistent set of trace sources across the
craigdo@4305
   916
devices.  The names of the trace sources have been changed to provide
craigdo@4305
   917
some context with respect to the level at which the trace occurred.
craigdo@4305
   918
A new set of trace sources has been added which emulates the behavior
craigdo@4305
   919
of packet sniffers.  These sources have been used to implement tcpdump-
craigdo@4305
   920
like functionality and are plumbed up into the helper classes.  The 
craigdo@4305
   921
user-visible changes are the trace source name changes and the ability
craigdo@4305
   922
to do promiscuous-mode pcap tracing via helpers.  For further information
craigdo@4305
   923
regarding these changes, please see the ns-3 manual</li>
craigdo@4305
   924
craigdo@4305
   925
<li>StaticMobilityModel has been renamed ConstantPositionMobilityModel
craigdo@4305
   926
StaticSpeedMobilityModel has been renamed ConstantVelocityMobilityModel</li>
craigdo@4305
   927
craigdo@4305
   928
<li>The Callback templates have been extended to support more parameters.
craigdo@4305
   929
See src/core/callback.h</li>
craigdo@4305
   930
craigdo@4305
   931
<li>Many helper API have been changed to allow passing Object-based parameters
craigdo@4305
   932
as string names to ease working with the object name service.</li>
craigdo@4305
   933
craigdo@4305
   934
<li>The Config APIs now accept path segments that are names defined by the
craigdo@4305
   935
object name service.</li>
craigdo@4305
   936
craigdo@4305
   937
<li>Minor changes were made to make the system build under the Intel C++ compiler.</li>
craigdo@4305
   938
craigdo@4305
   939
<li>Trace hooks for association and deassociation to/from an access point were
craigdo@4305
   940
added to src/devices/wifi/nqsta-wifi-mac.cc</li>
craigdo@4301
   941
</ul>
craigdo@4301
   942
craigdo@4305
   943
<h2>Changed behavior:</h2>
craigdo@4266
   944
craigdo@4266
   945
<ul>
craigdo@4305
   946
<li>The tracing system rework has introduced some significant changes in the
craigdo@4305
   947
behavior of some trace sources, specifically in the positioning of trace sources
craigdo@4305
   948
in the device code.  For example, there were cases where the packet transmit 
craigdo@4305
   949
trace source was hit before the packet was enqueued on the device transmit quueue.
craigdo@4305
   950
This now happens just before the packet is transmitted over the channel medium.
craigdo@4305
   951
The scope of the changes is too large to be included here.  If you have concerns
craigdo@4305
   952
regarding trace semantics, please consult the net device documentation for details.
craigdo@4305
   953
As is usual, the ultimate source for documentation is the net device source code.</li>
craigdo@4301
   954
</ul>
craigdo@4301
   955
mathieu@4260
   956
<hr>
craigdo@4305
   957
<h1>Changes from ns-3.2 to ns-3.3</h1>
craigdo@3865
   958
craigdo@4305
   959
<h2>New API:</h2>
craigdo@3865
   960
<ul>
craigdo@4305
   961
<li>
craigdo@4305
   962
ns-3 ABORT macros in src/core/abort.h
craigdo@4305
   963
Config::MatchContainer
craigdo@4305
   964
ConstCast and DynamicCast helper functions for Ptr casting
craigdo@4305
   965
StarTopology added to several topology helpers
craigdo@4305
   966
NetDevice::IsBridge () 
craigdo@4305
   967
</li>
craigdo@3865
   968
craigdo@3865
   969
<li>17-11-2008; changeset 
craigdo@3865
   970
<a href="http://code.nsnam.org/ns-3-dev/rev/4c1c3f6bcd03">4c1c3f6bcd03</a></li>
craigdo@3865
   971
<ul>
craigdo@3865
   972
<li>
craigdo@3865
   973
The PppHeader previously defined in the point-to-point-net-device code has been 
craigdo@3865
   974
made public.
craigdo@3865
   975
</li>
craigdo@3865
   976
</ul>
craigdo@3865
   977
craigdo@3865
   978
<li>17-11-2008; changeset 
craigdo@3865
   979
<a href="http://code.nsnam.org/ns-3-dev/rev/16c2970a0344">16c2970a0344</a></li>
craigdo@3865
   980
<ul>
craigdo@3865
   981
<li>
craigdo@3865
   982
An emulated net device has been added as enabling technology for ns-3 emulation
craigdo@3865
   983
scenarios.  See src/devices/emu and examples/emu-udp-echo.cc for details.
craigdo@3865
   984
</li>
craigdo@3865
   985
</ul>
craigdo@3865
   986
craigdo@3865
   987
<li>17-11-2008; changeset 
craigdo@3865
   988
<a href="http://code.nsnam.org/ns-3-dev/rev/4222173d1e6d">4222173d1e6d</a></li>
craigdo@3865
   989
<ul>
craigdo@3865
   990
<li>
craigdo@3865
   991
Added method InternetStackHelper::EnableAsciiChange to allow allow a user to 
craigdo@3865
   992
hook ascii trace to the drop trace events in Ipv4L3Protocol and ArpL3Protocol.
craigdo@3865
   993
</li>
craigdo@3865
   994
</ul>
craigdo@3865
   995
craigdo@3865
   996
</ul>
craigdo@4305
   997
<h2>Changes to existing API:</h2>
craigdo@3865
   998
<ul>
craigdo@3865
   999
tomh@3982
  1000
<li> NetDevice::MakeMulticastAddress() was renamed to NetDevice::GetMulticast()
tomh@3982
  1001
and the original GetMulticast() removed </li>
tomh@3982
  1002
tomh@3982
  1003
<li> Socket API changes:
tomh@3982
  1004
<ul>
tomh@3982
  1005
<li> return type of SetDataSentCallback () changed from bool to void </li>
tomh@3982
  1006
<li> Socket::Listen() no longer takes a queueLimit argument</li>
tomh@3982
  1007
</ul>
tomh@3982
  1008
tomh@3982
  1009
<li> As part of the Wifi Phy rework, there have been several API changes
tomh@3982
  1010
at the low level and helper API level.  </li>
tomh@3982
  1011
<ul>
tomh@3982
  1012
<li>  At the helper API level, the WifiHelper was split to three classes: 
tomh@3982
  1013
a WifiHelper, a YansWifiChannel helper, and a YansWifiPhy helper.  Some
tomh@3982
  1014
functions like Ascii and Pcap tracing functions were moved from class
tomh@3982
  1015
WifiHelper to class YansWifiPhyHelper. 
tomh@3982
  1016
<li>  At the low-level API, there have been a number of changes to
tomh@3982
  1017
make the Phy more modular:</li>
tomh@3982
  1018
<ul>
tomh@3982
  1019
<li> composite-propagation-loss-model.h is removed</li>
tomh@3982
  1020
<li> DcfManager::NotifyCcaBusyStartNow() has changed name</li>
tomh@3982
  1021
<li> fragmentation related functions (e.g. DcaTxop::GetNFragments()) have
tomh@3982
  1022
changed API to account for some implementation changes</li>
tomh@3982
  1023
<li> Interference helper and error rate model added </li>
tomh@3982
  1024
<li> JakesPropagationLossModel::GetLoss() moved to PropagationLoss() class</li>
tomh@3982
  1025
<li> base class WifiChannel made abstract </li>
tomh@3982
  1026
<li> WifiNetDevice::SetChannel() removed </li>
tomh@3982
  1027
<li> a WifiPhyState helper class added </li>
tomh@3982
  1028
<li> addition of the YansWifiChannel and YansWifiPhy classes </li>
tomh@3982
  1029
</ul>
tomh@3982
  1030
</ul>
tomh@3982
  1031
craigdo@3865
  1032
<li>17-11-2008; changeset 
craigdo@3865
  1033
<a href="http://code.nsnam.org/ns-3-dev/rev/dacfd1f07538">dacfd1f07538</a></li>
craigdo@3865
  1034
<ul>
craigdo@3865
  1035
<li>
craigdo@3865
  1036
Change attribute "RxErrorModel" to "ReceiveErrorModel" in CsmaNetDevice for 
craigdo@3865
  1037
consistency between devices.
craigdo@3865
  1038
</li>
craigdo@3865
  1039
</ul>
craigdo@3865
  1040
craigdo@3865
  1041
</ul>
craigdo@3865
  1042
<h2>changed behavior:</h2>
craigdo@3865
  1043
<ul>
craigdo@3865
  1044
craigdo@3865
  1045
<li>17-11-2008; changeset 
craigdo@3865
  1046
<a href="http://code.nsnam.org/ns-3-dev/rev/ed0dfce40459">ed0dfce40459</a></li>
craigdo@3865
  1047
<ul>
craigdo@3865
  1048
<li>
craigdo@3865
  1049
Relax reasonableness testing in Ipv4AddressHelper::SetBase to allow the 
craigdo@3865
  1050
assignment of /32 addresses.
craigdo@3865
  1051
</li>
craigdo@3865
  1052
</ul>
craigdo@3865
  1053
craigdo@3949
  1054
<li>17-11-2008; changeset 
craigdo@3949
  1055
<a href="http://code.nsnam.org/ns-3-dev/rev/756887a9bbea">756887a9bbea</a></li>
craigdo@3949
  1056
<ul>
craigdo@3949
  1057
<li>
craigdo@3949
  1058
Global routing supports bridge devices.
craigdo@3949
  1059
</li>
craigdo@3949
  1060
</ul>
tomh@3982
  1061
</ul>
craigdo@3949
  1062
craigdo@3865
  1063
<hr>
craigdo@4305
  1064
<h1>Changes from ns-3.1 to ns-3.2</h1>
craigdo@3593
  1065
craigdo@4305
  1066
<h2>New API:</h2>
tomh@3686
  1067
<ul>
craigdo@3593
  1068
craigdo@3593
  1069
<li>26-08-2008; changeset 
craigdo@3593
  1070
<a href="http://code.nsnam.org/ns-3-dev/rev/5aa65b1ea001">5aa65b1ea001</a></li>
craigdo@3593
  1071
<ul>
craigdo@3593
  1072
<li>
craigdo@3593
  1073
Add multithreaded and real-time simulator implementation.  Allows for emulated
craigdo@3593
  1074
net devices running in threads other than the main simulation thread to schedule
craigdo@3593
  1075
events.  Allows for pacing the simulation clock at 1x real-time.
craigdo@3593
  1076
</li>
craigdo@3593
  1077
</ul>
craigdo@3593
  1078
craigdo@3593
  1079
craigdo@3593
  1080
<li>26-08-2008; changeset 
craigdo@3593
  1081
<a href="http://code.nsnam.org/ns-3-dev/rev/c69779f5e51e">c69779f5e51e</a></li>
craigdo@3593
  1082
<ul>
craigdo@3593
  1083
<li>
craigdo@3593
  1084
Add threading and synchronization primitives.  Enabling technology for 
craigdo@3593
  1085
multithreaded simulator implementation.
craigdo@3593
  1086
</li>
craigdo@3593
  1087
</ul>
craigdo@3593
  1088
tomh@3686
  1089
</ul>
craigdo@4305
  1090
<h2>New API in existing classes:</h2>
tomh@3686
  1091
<ul>
tomh@3505
  1092
tomh@3505
  1093
<li>01-08-2008; changeset 
tomh@3505
  1094
<a href="http://code.nsnam.org/ns-3-dev/rev/a18520551cdf">a18520551cdf</a></li>
tomh@3505
  1095
<ul>
tomh@3505
  1096
<li>class ArpCache has two new attributes:  MaxRetries 
tomh@3505
  1097
and a Drop trace.  It also has some new public methods but these are 
tomh@3505
  1098
mostly for internal use.
tomh@3505
  1099
</ul>
tomh@3505
  1100
</li>
tomh@3686
  1101
tomh@3505
  1102
</ul>
craigdo@4305
  1103
<h2>Changes to existing API:</h2>
tomh@3686
  1104
<ul>
tomh@3505
  1105
craigdo@3667
  1106
<li>05-09-2008; changeset 
craigdo@3667
  1107
<a href="http://code.nsnam.org/ns-3-dev/rev/aa1fb0f43571">aa1fb0f43571</a></li>
craigdo@3667
  1108
<ul>
craigdo@3667
  1109
<li>
craigdo@3667
  1110
Change naming of MTU and packet size attributes in CSMA and Point-to-Point devices<br>
craigdo@3667
  1111
After much discussion it was decided that the preferred way to think about 
craigdo@3667
  1112
the different senses of transmission units and encapsulations was to call the 
craigdo@3667
  1113
MAC MTU simply MTU and to use the overall packet size as the PHY-level attribute
craigdo@3667
  1114
of interest.  See the Doxygen of CsmaNetDevice::SetFrameSize and 
craigdo@3667
  1115
PointToPointNetDevice::SetFrameSize for a detailed description.
craigdo@3667
  1116
</li>
craigdo@3667
  1117
</ul>
craigdo@3667
  1118
mathieu@3551
  1119
<li>25-08-2008; changeset 
mathieu@3551
  1120
<a href="http://code.nsnam.org/ns-3-dev/rev/e5ab96db540e">e5ab96db540e</a></li>
mathieu@3551
  1121
<ul>
mathieu@3551
  1122
<li>
mathieu@3551
  1123
bug 273: constify packet pointers.<br>
mathieu@3551
  1124
The normal and the promiscuous receive callbacks of the NetDevice API
mathieu@3551
  1125
have been changed from:
mathieu@3551
  1126
<pre>
ahippo@4639
  1127
Callback&lt;bool,Ptr&lt;NetDevice&gt;,Ptr&lt;Packet&gt;,uint16_t,const Address &amp;&gt;
ahippo@4639
  1128
Callback&lt;bool,Ptr&lt;NetDevice&gt;, Ptr&lt;Packet&gt;, uint16_t,
ahippo@4639
  1129
         const Address &amp;, const Address &amp;, enum PacketType &gt;
mathieu@3551
  1130
</pre>
mathieu@3551
  1131
to:
mathieu@3551
  1132
<pre>
ahippo@4639
  1133
Callback&lt;bool,Ptr&lt;NetDevice&gt;,Ptr&lt;const Packet&gt;,uint16_t,const Address &amp;&gt;
ahippo@4639
  1134
Callback&lt;bool,Ptr&lt;NetDevice&gt;, Ptr&lt;const Packet&gt;, uint16_t,
ahippo@4639
  1135
         const Address &amp;, const Address &amp;, enum PacketType &gt;
mathieu@3551
  1136
</pre>
mathieu@3551
  1137
to avoid the kind of bugs reported in 
mathieu@3551
  1138
<a href="http://www.nsnam.org/bugzilla/show_bug.cgi?id=273">bug 273</a>.
mathieu@3551
  1139
Users who implement a subclass of the NetDevice base class need to change the signature
mathieu@3551
  1140
of their SetReceiveCallback and SetPromiscReceiveCallback methods.
mathieu@3551
  1141
</li>
mathieu@3551
  1142
</ul>
mathieu@3551
  1143
mathieu@3551
  1144
craigdo@3508
  1145
<li>04-08-2008; changeset 
craigdo@3508
  1146
<a href="http://code.nsnam.org/ns-3-dev/rev/cba7b2b80fe8">cba7b2b80fe8</a></li>
craigdo@3508
  1147
<ul>
craigdo@3508
  1148
<li>
mathieu@3551
  1149
Cleanup of MTU confusion and initialization in CsmaNetDevice<br>
craigdo@3508
  1150
The MTU of the CsmaNetDevice defaulted to 65535.  This did not correspond with
craigdo@3508
  1151
the expected MTU found in Ethernet-like devices.  Also there was not clear 
craigdo@3508
  1152
documentation regarding which MTU was being set.  There are two MTU here, one
craigdo@3508
  1153
at the MAC level and one at the PHY level.  We split out the MTU setting to make
craigdo@3508
  1154
this more clear and set the default PHY level MTU to 1500 to be more like
craigdo@3508
  1155
Ethernet.  The encapsulation mode defaults to LLC/SNAP which then puts the
craigdo@3508
  1156
MAC level MTU at 1492 by default.  We allow users to now set the encapsulation
craigdo@3508
  1157
mode, MAC MTU and PHY MTU while keeping the three values consistent.  See the
craigdo@3508
  1158
Doxygen of CsmaNetDevice::SetMaxPayloadLength for a detailed description of the
craigdo@3508
  1159
issues and solution.
craigdo@3508
  1160
</li>
craigdo@3508
  1161
</ul>
mathieu@3551
  1162
tomh@3505
  1163
<li>21-07-2008; changeset 
tomh@3505
  1164
<a href="
tomh@3505
  1165
http://code.nsnam.org/ns-3-dev/rev/99698bc858e8">99698bc858e8</a></li>
tomh@3505
  1166
<ul>
tomh@3505
  1167
<li> class NetDevice has added a pure virtual method that
tomh@3505
  1168
must be implemented by all subclasses:
tomh@3505
  1169
<pre>
tomh@3505
  1170
virtual void SetPromiscReceiveCallback (PromiscReceiveCallback cb) = 0;
tomh@3505
  1171
</pre>
tomh@3505
  1172
All NetDevices must support this method, and must call this callback
tomh@3505
  1173
when processing packets in the receive direction (the appropriate place
tomh@3505
  1174
to call this is device-dependent).  An approach to stub this out
tomh@3505
  1175
temporarily, if you do not care about immediately enabling this
tomh@3505
  1176
functionality, would be to add this to your device:
tomh@3505
  1177
<pre>
tomh@3505
  1178
void
tomh@3505
  1179
ExampleNetDevice::SetPromiscReceiveCallback
tomh@3505
  1180
(NetDevice::PromiscReceiveCallback cb)
tomh@3505
  1181
{ 
tomh@3505
  1182
  NS_ASSERT_MSG (false, "No implementation yet for
tomh@3505
  1183
SetPromiscReceiveCallback");
tomh@3505
  1184
}
tomh@3505
  1185
</pre>
tomh@3505
  1186
To implement this properly, consult the CsmaNetDevice for examples of
tomh@3505
  1187
when the m_promiscRxCallback is called.
tomh@3505
  1188
</li>
tomh@3505
  1189
</ul>
tomh@3505
  1190
tomh@3505
  1191
<li>03-07-2008; changeset 
tomh@3505
  1192
<a href="http://code.nsnam.org/ns-3-dev/rev/d5f8e5fae1c6">d5f8e5fae1c6</a></li>
tomh@3505
  1193
<ul>
tomh@3505
  1194
<li>
tomh@3505
  1195
Miscellaneous cleanup of Udp Helper API, to fix bug 234
tomh@3505
  1196
<pre>
tomh@3505
  1197
class UdpEchoServerHelper
tomh@3505
  1198
{
tomh@3505
  1199
public:
tomh@3505
  1200
- UdpEchoServerHelper ();
tomh@3505
  1201
- void SetPort (uint16_t port); 
tomh@3505
  1202
+ UdpEchoServerHelper (uint16_t port);
tomh@3505
  1203
+ 
ahippo@4639
  1204
+ void SetAttribute (std::string name, const AttributeValue &amp;value);
tomh@3505
  1205
ApplicationContainer Install (NodeContainer c);
tomh@3505
  1206
tomh@3505
  1207
class UdpEchoClientHelper
tomh@3505
  1208
{
tomh@3505
  1209
public:
tomh@3505
  1210
- UdpEchoClientHelper ();
tomh@3505
  1211
+ UdpEchoClientHelper (Ipv4Address ip, uint16_t port);
tomh@3505
  1212
- void SetRemote (Ipv4Address ip, uint16_t port);
ahippo@4639
  1213
- void SetAppAttribute (std::string name, const AttributeValue &amp;value);
ahippo@4639
  1214
+ void SetAttribute (std::string name, const AttributeValue &amp;value);
tomh@3505
  1215
ApplicationContainer Install (NodeContainer c);
tomh@3505
  1216
</pre>
tomh@3505
  1217
</li>
tomh@3505
  1218
</ul>
mathieu@3551
  1219
tomh@3505
  1220
<li>03-07-2008; changeset 
tomh@3505
  1221
<a href="
tomh@3505
  1222
http://code.nsnam.org/ns-3-dev/rev/3cdd9d60f7c7">3cdd9d60f7c7</a></li>
tomh@3505
  1223
<ul>
tomh@3505
  1224
<li>
tomh@3505
  1225
Rename all instances method names using "Set..Parameter" to "Set..Attribute"
tomh@3505
  1226
(bug 232)
tomh@3505
  1227
</li>
tomh@3505
  1228
<li> How to fix your code:  Any use of helper API that was using a method
tomh@3505
  1229
"Set...Parameter()" should be changed to read "Set...Attribute()".  e.g.
tomh@3505
  1230
<pre>
tomh@3505
  1231
- csma.SetChannelParameter ("DataRate", DataRateValue (5000000));
tomh@3505
  1232
- csma.SetChannelParameter ("Delay", TimeValue (MilliSeconds (2)));
tomh@3505
  1233
+ csma.SetChannelAttribute ("DataRate", DataRateValue (5000000));
tomh@3505
  1234
+ csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2)));
tomh@3505
  1235
</pre>
tomh@3505
  1236
</li>
tomh@3505
  1237
</ul>
tomh@3505
  1238
</li>
tomh@3686
  1239
tomh@3505
  1240
</ul>
craigdo@4305
  1241
<h2>Changed behavior:</h2>
tomh@3505
  1242
<ul>
raj@3645
  1243
raj@3645
  1244
<li>07-09-2008; changeset 
raj@3645
  1245
<a href="http://code.nsnam.org/ns-3-dev/rev/5d836ab1523b">5d836ab1523b</a></li>
raj@3645
  1246
<ul>
tomh@3686
  1247
raj@3645
  1248
<li>
raj@3645
  1249
Implement a finite receive buffer for TCP<br>
raj@3645
  1250
The native TCP model in TcpSocketImpl did not support a finite receive buffer.
raj@3645
  1251
This changeset adds the following functionality in this regard:
raj@3645
  1252
<ul>
raj@3645
  1253
<li>
raj@3645
  1254
Being able to set the receiver buffer size through the attributes system.
raj@3645
  1255
</li>
raj@3645
  1256
<li>
raj@3645
  1257
This receiver buffer size is now correctly exported in the TCP header as the
raj@3645
  1258
advertised window.  Prior to this changeset, the TCP header advertised window
raj@3645
  1259
was set to the maximum size of 2^16 bytes.
raj@3645
  1260
window
raj@3645
  1261
</li>
raj@3645
  1262
<li>
raj@3645
  1263
The aforementioned window size is correctly used for flow control, i.e. the
raj@3645
  1264
sending TCP will not send more data than available space in the receiver's
raj@3645
  1265
buffer.
raj@3645
  1266
</li>
raj@3645
  1267
<li>
raj@3645
  1268
In the case of a receiver window collapse, when a advertised zero-window
raj@3645
  1269
packet is received, the sender enters the persist probing state in which
raj@3645
  1270
it sends probe packets with one payload byte at exponentially backed-off
mazo@6273
  1271
intervals up to 60s.  The receiver will continue to send advertised 
raj@3645
  1272
zero-window ACKs of the old data so long as the receiver buffer remains full.
raj@3645
  1273
When the receiver window clears up due to an application read, the TCP
raj@3645
  1274
will finally ACK the probe byte, and update its advertised window appropriately.
raj@3645
  1275
</li>
raj@3645
  1276
</ul>
raj@3645
  1277
See 
raj@3645
  1278
<a href="http://www.nsnam.org/bugzilla/show_bug.cgi?id=239"> bug 239 </a> for
raj@3645
  1279
more.
raj@3645
  1280
</li>
raj@3645
  1281
</ul>
raj@3645
  1282
raj@3645
  1283
<li>07-09-2008; changeset 
raj@3645
  1284
<a href="http://code.nsnam.org/ns-3-dev/rev/7afa66c2b291">7afa66c2b291</a></li>
raj@3645
  1285
<ul>
raj@3645
  1286
<li>
raj@3645
  1287
Add correct FIN exchange behavior during TCP closedown<br>
raj@3645
  1288
The behavior of the native TcpSocketImpl TCP model was such that the final
raj@3645
  1289
FIN exchange was not correct, i.e. calling Socket::Close didn't send a FIN
raj@3645
  1290
packet, and even if it had, the ACK never came back, and even if it had, the
raj@3645
  1291
ACK would have incorrect sequence number.  All these various problems have been
raj@3645
  1292
addressed by this changeset.  See 
raj@3645
  1293
<a href="http://www.nsnam.org/bugzilla/show_bug.cgi?id=242"> bug 242 </a> for
raj@3645
  1294
more.
raj@3645
  1295
</li>
raj@3645
  1296
</ul>
raj@3645
  1297
tomh@3505
  1298
<li> 28-07-2008; changeset 
tomh@3505
  1299
<a href="http://code.nsnam.org/ns-3-dev/rev/6f68f1044df1">6f68f1044df1</a>
tomh@3505
  1300
<ul>
tomh@3505
  1301
<li>
tomh@3505
  1302
OLSR: HELLO messages hold time changed to 3*hello
tomh@3505
  1303
interval from hello interval.  This is an important bug fix as
tomh@3505
  1304
hold time == refresh time was never intentional, as it leads to
tomh@3505
  1305
instability in neighbor detection.
tomh@3505
  1306
</ul>
tomh@3505
  1307
</li>
tomh@3686
  1308
tomh@3505
  1309
</ul>
mathieu@3551
  1310
tomh@3505
  1311
</body>
tomh@3505
  1312
</html>