CHANGES.html
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Sat, 04 Jul 2009 08:15:48 +0200
changeset 4654 2eaebe77d66b
parent 4637 34e6d141c227
parent 4642 b40170d32073
permissions -rw-r--r--
Added tag ns-3.5 for changeset c975274c9707
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@4385
    47
<h1>Changes from ns-3.4 to ns-3.5</h1>
tomh@4385
    48
tomh@4385
    49
<h2>Changes to build system:</h2>
tomh@4385
    50
<ul>
tomh@4385
    51
</ul>
tomh@4385
    52
tomh@4385
    53
<h2>New API:</h2>
nbaldo@4492
    54
tomh@4385
    55
<ul>
nbaldo@4492
    56
<li><b>YansWifiPhyHelper supporting radiotap and prism PCAP output</b>
nbaldo@4492
    57
<p>The newly supported pcap formats can be adopted by calling the following new method of YansWifiPhyHelper:</p>
nbaldo@4492
    58
<pre>
nbaldo@4492
    59
 +  void SetPcapFormat (enum PcapFormat format);
nbaldo@4492
    60
</pre>
nbaldo@4492
    61
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
    62
</li>
mathieu@4502
    63
tomh@4475
    64
<li> <b>attributes for class Ipv4</b>
tomh@4475
    65
<p> class Ipv4 now contains attributes in ipv4.cc; the first one
tomh@4475
    66
is called "IpForward" that will enable/disable Ipv4 forwarding.  
tomh@4475
    67
</li>
mathieu@4502
    68
mathieu@4502
    69
<li> <b>packet tags</b>
mathieu@4502
    70
<p>class Packet now contains AddPacketTag, RemovePacketTag and PeekPacketTag 
mathieu@4502
    71
which can be used to attach a tag to a packet, as opposed to the old 
mathieu@4502
    72
AddTag method which attached a tag to a set of bytes. The main 
mathieu@4502
    73
semantic difference is in how these tags behave in the presence of 
mathieu@4502
    74
fragmentation and reassembly.
mathieu@4502
    75
</li>
mathieu@4505
    76
tomh@4385
    77
</ul>
tomh@4385
    78
tomh@4385
    79
<h2>Changes to existing API:</h2>
tomh@4385
    80
<ul>
mathieu@4426
    81
tomh@4572
    82
<li><b>Ipv4Interface::GetMtu () deleted</b>
tomh@4572
    83
  <p>The Ipv4Interface API is private to internet-stack module; this method
ahippo@4637
    84
was just a pass-through to GetDevice ()-&gt;GetMtu ().
tomh@4572
    85
  </p>
tomh@4572
    86
</li>
tomh@4572
    87
tomh@4642
    88
<li><b>GlobalRouteManager::PopulateRoutingTables () and RecomputeRoutingTables () are deprecated </b>
tomh@4642
    89
  <p>This API has been moved to the helper API and the above functions will
tomh@4642
    90
be removed in ns-3.6.  The new API is:
tomh@4642
    91
<pre>
tomh@4642
    92
Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
tomh@4642
    93
Ipv4GlobalRoutingHelper::RecomputeRoutingTables ();
tomh@4642
    94
</pre>
tomh@4642
    95
Additionally, these low-level functions in GlobalRouteManager are now public,
tomh@4642
    96
allowing more API flexibility at the low level ns-3 API:
tomh@4642
    97
<pre>
tomh@4642
    98
GlobalRouteManager::DeleteGlobalRoutes ();
tomh@4642
    99
GlobalRouteManager::BuildGlobalRoutingDatabase ();
tomh@4642
   100
GlobalRouteManager::InitializeRoutes ();
tomh@4642
   101
</pre>
tomh@4642
   102
  </p>
tomh@4642
   103
</li>
tomh@4642
   104
tomh@4568
   105
<li><b>CalcChecksum attribute changes</b>
tomh@4568
   106
  <p>Four IPv4 CalcChecksum attributes (which enable the computation of 
tomh@4568
   107
checksums that are disabled by default) have been collapsed into one global 
tomh@4568
   108
value in class Node.  These four calls: 
tomh@4568
   109
<pre>
tomh@4568
   110
Config::SetDefault ("ns3::Ipv4L3Protocol::CalcChecksum", BooleanValue (true)); 
tomh@4568
   111
Config::SetDefault ("ns3::Icmpv4L4Protocol::CalcChecksum", BooleanValue (true));
tomh@4568
   112
Config::SetDefault ("ns3::TcpL4Protocol::CalcChecksum", BooleanValue (true));
tomh@4568
   113
Config::SetDefault ("ns3::UdpL4Protocol::CalcChecksum", BooleanValue (true));
tomh@4568
   114
</pre>
tomh@4568
   115
are replaced by one call to:
tomh@4568
   116
<pre>
tomh@4568
   117
GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
tomh@4568
   118
</pre>
tomh@4568
   119
  </p>
tomh@4568
   120
</li>
tomh@4568
   121
mathieu@4555
   122
<li><b>CreateObject changes</b>
mathieu@4555
   123
  <p>CreateObject is now able to construct objects with a non-default constructor.
mathieu@4555
   124
   If you used to pass attribute lists to CreateObject, you must now use CreateObjectWithAttributes.
mathieu@4555
   125
  </p>
mathieu@4555
   126
</li>
mathieu@4555
   127
mathieu@4502
   128
<li> <b>packet byte tags renaming</b>
mathieu@4502
   129
  <ul>
mathieu@4502
   130
  <li>Packet::AddTag to Packet::AddByteTag</li>
mathieu@4502
   131
  <li>Packet::FindFirstMatchingTag to Packet::FindFirstMatchingByteTag</li>
mathieu@4502
   132
  <li>Packet::RemoveAllTags to Packet::RemoveAllByteTags</li>
mathieu@4502
   133
  <li>Packet::PrintTags to Packet::PrintByteTags</li>
mathieu@4502
   134
  <li>Packet::GetTagIterator to Packet::GetByteTagIterator</li>
mathieu@4502
   135
  </ul>
mathieu@4502
   136
</li>
mathieu@4502
   137
mathieu@4505
   138
<li><b>YansWifiPhyHelper::EnablePcap* methods not static any more</b>
nbaldo@4492
   139
<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
   140
<pre>
nbaldo@4492
   141
-  static void EnablePcap (std::string filename, uint32_t nodeid, uint32_t deviceid);
nbaldo@4492
   142
+         void EnablePcap (std::string filename, uint32_t nodeid, uint32_t deviceid);
nbaldo@4492
   143
-  static void EnablePcap (std::string filename, Ptr<NetDevice> nd);
nbaldo@4492
   144
+         void EnablePcap (std::string filename, Ptr<NetDevice> nd);
nbaldo@4492
   145
-  static void EnablePcap (std::string filename, std::string ndName);
nbaldo@4492
   146
+         void EnablePcap (std::string filename, std::string ndName);
nbaldo@4492
   147
-  static void EnablePcap (std::string filename, NetDeviceContainer d);
nbaldo@4492
   148
+         void EnablePcap (std::string filename, NetDeviceContainer d);
nbaldo@4492
   149
-  static void EnablePcap (std::string filename, NodeContainer n);
nbaldo@4492
   150
+         void EnablePcap (std::string filename, NodeContainer n);
nbaldo@4492
   151
-  static void EnablePcapAll (std::string filename);
nbaldo@4492
   152
+         void EnablePcapAll (std::string filename);
nbaldo@4492
   153
</pre>
nbaldo@4492
   154
</p>
nbaldo@4492
   155
</li>
nbaldo@4492
   156
nbaldo@4492
   157
<li><b>Wifi Promisc Sniff interface modified </b>
nbaldo@4492
   158
<p> 
nbaldo@4492
   159
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
   160
<pre>
ahippo@4637
   161
-  void NotifyPromiscSniff (Ptr&lt;const Packet&gt; packet);
ahippo@4637
   162
+  void NotifyPromiscSniffRx (Ptr&lt;const Packet&gt; packet, uint16_t channelFreqMhz, uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm);
ahippo@4637
   163
+  void NotifyPromiscSniffTx (Ptr&lt;const Packet&gt; packet, uint16_t channelFreqMhz, uint32_t rate, bool isShortPreamble);
ahippo@4637
   164
-  TracedCallback&lt;Ptr&lt;const Packet&gt; &gt; m_phyPromiscSnifferTrace;
ahippo@4637
   165
+  TracedCallback&lt;Ptr&lt;const Packet&gt;, uint16_t, uint32_t, bool, double, double&gt; m_phyPromiscSniffRxTrace;
ahippo@4637
   166
+  TracedCallback&lt;Ptr&lt;const Packet&gt;, uint16_t, uint32_t, bool&gt; m_phyPromiscSniffTxTrace;
nbaldo@4492
   167
</pre>
nbaldo@4492
   168
The above mentioned callbacks are expected to be used to call the following method to write Wifi PCAP traces in promiscuous mode:
nbaldo@4492
   169
<pre>
ahippo@4637
   170
+  void WriteWifiMonitorPacket(Ptr&lt;const Packet&gt; packet, uint16_t channelFreqMhz, uint32_t rate, bool isShortPreamble, bool isTx, double signalDbm, double noiseDbm);
nbaldo@4492
   171
</pre>
nbaldo@4492
   172
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
   173
</p>
nbaldo@4492
   174
</li>
nbaldo@4492
   175
tomh@4475
   176
<li><b> Routing decoupled from class Ipv4</b>
tomh@4475
   177
<p> All calls of the form "Ipv4::AddHostRouteTo ()" etc. (i.e. to 
tomh@4475
   178
add static routes, both unicast and multicast) have been moved to a new 
tomh@4475
   179
class Ipv4StaticRouting.  In addition, class Ipv4 now holds only
tomh@4475
   180
one possible routing protocol; the previous way to add routing protocols
tomh@4475
   181
(by ordered list of priority) has been moved to a new class Ipv4ListRouting.
tomh@4475
   182
Class Ipv4 has a new minimal routing API (just to set and get the routing
tomh@4475
   183
protocol):
tomh@4475
   184
<pre>
tomh@4475
   185
-  virtual void AddRoutingProtocol (Ptr&lt;Ipv4RoutingProtocol&gt; routingProtocol, int16_t priority) = 0;
tomh@4475
   186
+  virtual void SetRoutingProtocol (Ptr&lt;Ipv4RoutingProtocol&gt; routingProtocol) = 0;
tomh@4475
   187
+  virtual Ptr&lt;Ipv4RoutingProtocol&gt; GetRoutingProtocol (void) const = 0;
tomh@4475
   188
</pre>
tomh@4475
   189
</li>
tomh@4475
   190
tomh@4475
   191
<li><b> class Ipv4RoutingProtocol is refactored</b>
tomh@4475
   192
<p> The abstract base class Ipv4RoutingProtocol has been refactored to
tomh@4475
   193
align with corresponding Linux Ipv4 routing architecture, and has been
tomh@4475
   194
moved from ipv4.h to a new file ipv4-routing-protocol.h.  The new
tomh@4475
   195
methods (RouteOutput () and RouteInput ()) are aligned with Linux 
tomh@4475
   196
ip_route_output() and ip_route_input().  However,
tomh@4475
   197
the general nature of these calls (synchronous routing lookup for
tomh@4475
   198
locally originated packets, and an asynchronous, callback-based lookup
tomh@4475
   199
for forwarded packets) is still the same.
tomh@4475
   200
<pre>
ahippo@4637
   201
-  typedef Callback&lt;void, bool, const Ipv4Route&amp;, Ptr&lt;Packet&gt;, const Ipv4Header&amp;&gt; RouteReplyCallback;
ahippo@4637
   202
+  typedef Callback&lt;void, Ptr&lt;Ipv4Route&gt;, Ptr&lt;const Packet&gt;, const Ipv4Header &amp;&gt; UnicastForwardCallback;
ahippo@4637
   203
+  typedef Callback&lt;void, Ptr&lt;Ipv4MulticastRoute&gt;, Ptr&lt;const Packet&gt;, const Ipv4Header &amp;&gt; MulticastForwardCallback;
ahippo@4637
   204
+  typedef Callback&lt;void, Ptr&lt;const Packet&gt;, const Ipv4Header &amp;, uint32_t &gt; LocalDeliverCallback;
ahippo@4637
   205
+  typedef Callback&lt;void, Ptr&lt;const Packet&gt;, const Ipv4Header &amp;&gt; ErrorCallback;
ahippo@4637
   206
-  virtual bool RequestInterface (Ipv4Address destination, uint32_t&amp; interface) = 0;
ahippo@4637
   207
+  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
   208
-  virtual bool RequestRoute (uint32_t interface,
ahippo@4637
   209
-                            const Ipv4Header &amp;ipHeader,
tomh@4475
   210
-                            Ptr&lt;Packet&gt; packet,
tomh@4475
   211
-                            RouteReplyCallback routeReply) = 0;
ahippo@4637
   212
+  virtual bool RouteInput  (Ptr&lt;const Packet&gt; p, const Ipv4Header &amp;header, Ptr&lt;const NetDevice&gt; idev,
tomh@4475
   213
+                             UnicastForwardCallback ucb, MulticastForwardCallback mcb,
tomh@4475
   214
+                             LocalDeliverCallback lcb, ErrorCallback ecb) = 0;
tomh@4475
   215
</pre>
tomh@4475
   216
tomh@4475
   217
</li>
tomh@4475
   218
<li><b> previous class Ipv4Route, Ipv4MulticastRoute renamed; new classes with
tomh@4475
   219
those same names added</b>
tomh@4475
   220
<p> The previous class Ipv4Route and Ipv4MulticastRoute are used by 
tomh@4475
   221
Ipv4StaticRouting and Ipv4GlobalRouting to record internal routing table
tomh@4475
   222
entries, so they were renamed to class Ipv4RoutingTableEntry and
tomh@4475
   223
Ipv4MulticastRoutingTableEntry, respectively.  In their place, new
tomh@4475
   224
class Ipv4Route and class Ipv4MulticastRoute have been added.  These
tomh@4475
   225
are reference-counted objects that are analogous to Linux struct
tomh@4475
   226
rtable and struct mfc_cache, respectively, to achieve better compatibility
tomh@4475
   227
with Linux routing architecture in the future.  
tomh@4475
   228
tomh@4475
   229
<li><b> class Ipv4 address-to-interface mapping functions changed</b>
tomh@4475
   230
<p>  There was some general cleanup of functions that involve mappings
tomh@4475
   231
from Ipv4Address to either NetDevice or Ipv4 interface index.  
tomh@4475
   232
<pre>
tomh@4475
   233
-  virtual uint32_t FindInterfaceForAddr (Ipv4Address addr) const = 0;
tomh@4475
   234
-  virtual uint32_t FindInterfaceForAddr (Ipv4Address addr, Ipv4Mask mask) const = 0;
tomh@4475
   235
+  virtual int32_t GetInterfaceForAddress (Ipv4Address address) const = 0;
tomh@4475
   236
+  virtual int32_t GetInterfaceForPrefix (Ipv4Address address, Ipv4Mask mask) const = 0;
tomh@4475
   237
-  virtual int32_t FindInterfaceForDevice(Ptr&lt;NetDevice&gt; nd) const = 0;
tomh@4475
   238
+  virtual int32_t GetInterfaceForDevice (Ptr&lt;const NetDevice&gt; device) const = 0;
tomh@4475
   239
-  virtual Ipv4Address GetSourceAddress (Ipv4Address destination) const = 0;
tomh@4475
   240
-  virtual bool GetInterfaceForDestination (Ipv4Address dest,
tomh@4475
   241
-  virtual uint32_t GetInterfaceByAddress (Ipv4Address addr, Ipv4Mask mask = Ipv4Mask("255.255.255.255"));
tomh@4475
   242
</pre>
tomh@4475
   243
tomh@4475
   244
<li><b> class Ipv4 multicast join API deleted</b>
tomh@4475
   245
<p> The following methods are not really used in present form since IGMP
tomh@4475
   246
is not being generated, so they have been removed (planned to be replaced
tomh@4475
   247
by multicast socket-based calls in the future):
tomh@4475
   248
tomh@4475
   249
<pre>
tomh@4475
   250
- virtual void JoinMulticastGroup (Ipv4Address origin, Ipv4Address group) = 0;
tomh@4475
   251
- virtual void LeaveMulticastGroup (Ipv4Address origin, Ipv4Address group) = 0;
tomh@4475
   252
</pre>
tomh@4475
   253
tomh@4475
   254
mathieu@4426
   255
<li><b>Deconflict NetDevice::ifIndex and Ipv4::ifIndex (bug 85).</b>
mathieu@4426
   256
<p>All function parameters named "ifIndex" that refer 
tomh@4385
   257
to an Ipv4 interface are instead named "interface".
tomh@4385
   258
<pre>
tomh@4385
   259
- static const uint32_t Ipv4RoutingProtocol::IF_INDEX_ANY = 0xffffffff;
tomh@4385
   260
+ static const uint32_t Ipv4RoutingProtocol::INTERFACE_ANY = 0xffffffff;
tomh@4385
   261
ahippo@4637
   262
- bool Ipv4RoutingProtocol::RequestIfIndex (Ipv4Address destination, uint32_t&amp; ifIndex);
ahippo@4637
   263
+ bool Ipv4RoutingProtocol::RequestInterface (Ipv4Address destination, uint32_t&amp; interface);
tomh@4385
   264
(N.B. this particular function is planned to be renamed to RouteOutput() in the
tomh@4385
   265
proposed IPv4 routing refactoring)
tomh@4385
   266
tomh@4385
   267
- uint32_t Ipv4::GetIfIndexByAddress (Ipv4Address addr, Ipv4Mask mask);
tomh@4385
   268
+ int_32t Ipv4::GetInterfaceForAddress (Ipv4Address address, Ipv4Mask mask) const;
tomh@4385
   269
ahippo@4637
   270
- bool Ipv4::GetIfIndexForDestination (Ipv4Address dest, uint32_t &amp;ifIndex) const;
ahippo@4637
   271
+ bool Ipv4::GetInterfaceForDestination (Ipv4Address dest, uint32_t &amp;interface) const;
tomh@4385
   272
(N.B. this function is not needed in the proposed Ipv4 routing refactoring)
tomh@4385
   273
</pre>
mathieu@4426
   274
mathieu@4426
   275
mathieu@4426
   276
<li><b>Allow multiple IPv4 addresses to be assigned to an interface (bug 188)</b>
mathieu@4426
   277
  <ul>
mathieu@4426
   278
  <li> Add class Ipv4InterfaceAddress:  
mathieu@4426
   279
  This is a new class to resemble Linux's struct in_ifaddr.  It holds IP addressing information, including mask,
mathieu@4426
   280
  broadcast address, scope, whether primary or secondary, etc.
mathieu@4426
   281
  <pre>
tomh@4385
   282
+  virtual uint32_t AddAddress (uint32_t interface, Ipv4InterfaceAddress address) = 0;
tomh@4385
   283
+  virtual Ipv4InterfaceAddress GetAddress (uint32_t interface, uint32_t addressIndex) const = 0;
tomh@4385
   284
+  virtual uint32_t GetNAddresses (uint32_t interface) const = 0;
mathieu@4426
   285
  </pre>
mathieu@4426
   286
  <li>Regarding legacy API usage, typically where you once did the following,
mathieu@4426
   287
  using the public Ipv4 class interface (e.g.):
mathieu@4426
   288
  <pre>
ahippo@4637
   289
  ipv4A-&gt;SetAddress (ifIndexA, Ipv4Address ("172.16.1.1"));
ahippo@4637
   290
  ipv4A-&gt;SetNetworkMask (ifIndexA, Ipv4Mask ("255.255.255.255"));
mathieu@4426
   291
  </pre>
mathieu@4426
   292
  you now do:
mathieu@4426
   293
  <pre>
tomh@4385
   294
  Ipv4InterfaceAddress ipv4IfAddrA = Ipv4InterfaceAddress (Ipv4Address ("172.16.1.1"), Ipv4Mask ("255.255.255.255"));
ahippo@4637
   295
  ipv4A-&gt;AddAddress (ifIndexA, ipv4IfAddrA);
mathieu@4426
   296
  </pre>
mathieu@4426
   297
  <li> At the helper API level, one often gets an address from an interface
mathieu@4426
   298
  container.  We preserve the legacy GetAddress (uint32_t i) but it
mathieu@4426
   299
  is documented that this will return only the first (address index 0)
mathieu@4426
   300
  address on the interface, if there are multiple such addresses. 
mathieu@4426
   301
  We provide also an overloaded variant for the multi-address case: 
tomh@4385
   302
mathieu@4426
   303
  <pre>
tomh@4385
   304
Ipv4Address Ipv4InterfaceContainer::GetAddress (uint32_t i)
tomh@4385
   305
+ Ipv4Address Ipv4InterfaceContainer::GetAddress (uint32_t i, uint32_t j)
mathieu@4426
   306
  </pre>
mk@4413
   307
mathieu@4426
   308
  </ul>
mk@4413
   309
mathieu@4426
   310
<li><b>New WifiMacHelper objects</b>
mathieu@4426
   311
<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
   312
  <pre>
ahippo@4637
   313
- void WifiHelper::SetMac (std::string type, std::string n0 = "", const AttributeValue &amp;v0 = EmptyAttributeValue (),...)
mk@4413
   314
ahippo@4637
   315
- NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phyHelper, NodeContainer c) const
ahippo@4637
   316
+ NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phyHelper, const WifiMacHelper &amp;macHelper, NodeContainer c) const
mk@4413
   317
ahippo@4637
   318
- NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phy, Ptr&lt;Node&gt; node) const
ahippo@4637
   319
+ NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phy, const WifiMacHelper &amp;mac, Ptr&lt;Node&gt; node) const
mk@4413
   320
ahippo@4637
   321
- NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phy, std::string nodeName) const
ahippo@4637
   322
+ NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phy, const WifiMacHelper &amp;mac, std::string nodeName) const
mathieu@4426
   323
  </pre>
mathieu@4426
   324
  See src/helper/nqos-wifi-mac-helper.h and src/helper/qos-wifi-mac-helper.h for more details.
mathieu@4426
   325
  </p>
mk@4413
   326
mathieu@4426
   327
<li><b>Remove Mac48Address::IsMulticast</b>
mathieu@4426
   328
  <p>This method was considered buggy and unsafe to call. Its replacement is Mac48Address::IsGroup.
mathieu@4426
   329
  </li>
mathieu@4426
   330
tomh@4385
   331
</ul>
tomh@4385
   332
tomh@4385
   333
<h2>Changed behavior:</h2>
tomh@4385
   334
<ul>
tomh@4385
   335
</ul>
tomh@4385
   336
tomh@4385
   337
<hr>
craigdo@4305
   338
<h1>Changes from ns-3.3 to ns-3.4</h1>
mathieu@4260
   339
tomh@4385
   340
<h2>Changes to build system:</h2>
craigdo@4301
   341
<ul>
craigdo@4305
   342
<li>A major option regarding the downloading and building of ns-3 has been
craigdo@4305
   343
added for ns-3.4 -- the ns-3-allinone feature.  This allows a user to
craigdo@4305
   344
get the most common options for ns-3 downloaded and built with a minimum
craigdo@4305
   345
amount of trouble.  See the ns-3 tutorial for a detailed explanation of
craigdo@4305
   346
how to use this new feature.</li>
craigdo@4305
   347
craigdo@4305
   348
<li>The build system now runs build items in parallel by default.  This includes
craigdo@4305
   349
the regression tests.</li>
craigdo@4301
   350
</ul>
craigdo@4301
   351
craigdo@4305
   352
<h2>New API:</h2>
mathieu@4260
   353
<ul>
ahippo@4637
   354
<li>XML support has been added to the ConfigStore in src/contrib/config-store.cc</li>
craigdo@4301
   355
craigdo@4301
   356
<li>The ns-2 calendar queue scheduler option has been ported to src/simulator</li>
craigdo@4301
   357
craigdo@4301
   358
<li>A ThreeLogDistancePropagationLossModel has been added to src/devices/wifi</li>
craigdo@4301
   359
mathieu@4260
   360
<li>ConstantAccelerationMobilityModel in src/mobility/constant-acceleration-mobility-model.h</li>
mathieu@4260
   361
craigdo@4305
   362
<li>A new emulation mode is supported with the TapBridge net device (see
craigdo@4305
   363
src/devices/tap-bridge)</li>
craigdo@4266
   364
craigdo@4305
   365
<li>A new facility for naming ns-3 Objects is included (see
craigdo@4305
   366
src/core/names.{cc,h})</li>
craigdo@4266
   367
craigdo@4301
   368
<li>Wifi multicast support has been added in src/devices/wifi</li>
craigdo@4301
   369
</ul>
craigdo@4301
   370
craigdo@4305
   371
<h2>Changes to existing API:</h2>
mathieu@4260
   372
mathieu@4260
   373
<ul>
craigdo@4305
   374
<li>Some fairly significant changes have been made to the API of the
craigdo@4305
   375
random variable code.  Please see the ns-3 manual and src/core/random-variable.cc
craigdo@4305
   376
for details.</li>
craigdo@4305
   377
craigdo@4305
   378
<li>The trace sources in the various NetDevice classes has been completely
craigdo@4305
   379
reworked to allow for a consistent set of trace sources across the
craigdo@4305
   380
devices.  The names of the trace sources have been changed to provide
craigdo@4305
   381
some context with respect to the level at which the trace occurred.
craigdo@4305
   382
A new set of trace sources has been added which emulates the behavior
craigdo@4305
   383
of packet sniffers.  These sources have been used to implement tcpdump-
craigdo@4305
   384
like functionality and are plumbed up into the helper classes.  The 
craigdo@4305
   385
user-visible changes are the trace source name changes and the ability
craigdo@4305
   386
to do promiscuous-mode pcap tracing via helpers.  For further information
craigdo@4305
   387
regarding these changes, please see the ns-3 manual</li>
craigdo@4305
   388
craigdo@4305
   389
<li>StaticMobilityModel has been renamed ConstantPositionMobilityModel
craigdo@4305
   390
StaticSpeedMobilityModel has been renamed ConstantVelocityMobilityModel</li>
craigdo@4305
   391
craigdo@4305
   392
<li>The Callback templates have been extended to support more parameters.
craigdo@4305
   393
See src/core/callback.h</li>
craigdo@4305
   394
craigdo@4305
   395
<li>Many helper API have been changed to allow passing Object-based parameters
craigdo@4305
   396
as string names to ease working with the object name service.</li>
craigdo@4305
   397
craigdo@4305
   398
<li>The Config APIs now accept path segments that are names defined by the
craigdo@4305
   399
object name service.</li>
craigdo@4305
   400
craigdo@4305
   401
<li>Minor changes were made to make the system build under the Intel C++ compiler.</li>
craigdo@4305
   402
craigdo@4305
   403
<li>Trace hooks for association and deassociation to/from an access point were
craigdo@4305
   404
added to src/devices/wifi/nqsta-wifi-mac.cc</li>
craigdo@4301
   405
</ul>
craigdo@4301
   406
craigdo@4305
   407
<h2>Changed behavior:</h2>
craigdo@4266
   408
craigdo@4266
   409
<ul>
craigdo@4305
   410
<li>The tracing system rework has introduced some significant changes in the
craigdo@4305
   411
behavior of some trace sources, specifically in the positioning of trace sources
craigdo@4305
   412
in the device code.  For example, there were cases where the packet transmit 
craigdo@4305
   413
trace source was hit before the packet was enqueued on the device transmit quueue.
craigdo@4305
   414
This now happens just before the packet is transmitted over the channel medium.
craigdo@4305
   415
The scope of the changes is too large to be included here.  If you have concerns
craigdo@4305
   416
regarding trace semantics, please consult the net device documentation for details.
craigdo@4305
   417
As is usual, the ultimate source for documentation is the net device source code.</li>
craigdo@4301
   418
</ul>
craigdo@4301
   419
mathieu@4260
   420
<hr>
craigdo@4305
   421
<h1>Changes from ns-3.2 to ns-3.3</h1>
craigdo@3865
   422
craigdo@4305
   423
<h2>New API:</h2>
craigdo@3865
   424
<ul>
craigdo@4305
   425
<li>
craigdo@4305
   426
ns-3 ABORT macros in src/core/abort.h
craigdo@4305
   427
Config::MatchContainer
craigdo@4305
   428
ConstCast and DynamicCast helper functions for Ptr casting
craigdo@4305
   429
StarTopology added to several topology helpers
craigdo@4305
   430
NetDevice::IsBridge () 
craigdo@4305
   431
</li>
craigdo@3865
   432
craigdo@3865
   433
<li>17-11-2008; changeset 
craigdo@3865
   434
<a href="http://code.nsnam.org/ns-3-dev/rev/4c1c3f6bcd03">4c1c3f6bcd03</a></li>
craigdo@3865
   435
<ul>
craigdo@3865
   436
<li>
craigdo@3865
   437
The PppHeader previously defined in the point-to-point-net-device code has been 
craigdo@3865
   438
made public.
craigdo@3865
   439
</li>
craigdo@3865
   440
</ul>
craigdo@3865
   441
craigdo@3865
   442
<li>17-11-2008; changeset 
craigdo@3865
   443
<a href="http://code.nsnam.org/ns-3-dev/rev/16c2970a0344">16c2970a0344</a></li>
craigdo@3865
   444
<ul>
craigdo@3865
   445
<li>
craigdo@3865
   446
An emulated net device has been added as enabling technology for ns-3 emulation
craigdo@3865
   447
scenarios.  See src/devices/emu and examples/emu-udp-echo.cc for details.
craigdo@3865
   448
</li>
craigdo@3865
   449
</ul>
craigdo@3865
   450
craigdo@3865
   451
<li>17-11-2008; changeset 
craigdo@3865
   452
<a href="http://code.nsnam.org/ns-3-dev/rev/4222173d1e6d">4222173d1e6d</a></li>
craigdo@3865
   453
<ul>
craigdo@3865
   454
<li>
craigdo@3865
   455
Added method InternetStackHelper::EnableAsciiChange to allow allow a user to 
craigdo@3865
   456
hook ascii trace to the drop trace events in Ipv4L3Protocol and ArpL3Protocol.
craigdo@3865
   457
</li>
craigdo@3865
   458
</ul>
craigdo@3865
   459
craigdo@3865
   460
</ul>
craigdo@4305
   461
<h2>Changes to existing API:</h2>
craigdo@3865
   462
<ul>
craigdo@3865
   463
tomh@3982
   464
<li> NetDevice::MakeMulticastAddress() was renamed to NetDevice::GetMulticast()
tomh@3982
   465
and the original GetMulticast() removed </li>
tomh@3982
   466
tomh@3982
   467
<li> Socket API changes:
tomh@3982
   468
<ul>
tomh@3982
   469
<li> return type of SetDataSentCallback () changed from bool to void </li>
tomh@3982
   470
<li> Socket::Listen() no longer takes a queueLimit argument</li>
tomh@3982
   471
</ul>
tomh@3982
   472
tomh@3982
   473
<li> As part of the Wifi Phy rework, there have been several API changes
tomh@3982
   474
at the low level and helper API level.  </li>
tomh@3982
   475
<ul>
tomh@3982
   476
<li>  At the helper API level, the WifiHelper was split to three classes: 
tomh@3982
   477
a WifiHelper, a YansWifiChannel helper, and a YansWifiPhy helper.  Some
tomh@3982
   478
functions like Ascii and Pcap tracing functions were moved from class
tomh@3982
   479
WifiHelper to class YansWifiPhyHelper. 
tomh@3982
   480
<li>  At the low-level API, there have been a number of changes to
tomh@3982
   481
make the Phy more modular:</li>
tomh@3982
   482
<ul>
tomh@3982
   483
<li> composite-propagation-loss-model.h is removed</li>
tomh@3982
   484
<li> DcfManager::NotifyCcaBusyStartNow() has changed name</li>
tomh@3982
   485
<li> fragmentation related functions (e.g. DcaTxop::GetNFragments()) have
tomh@3982
   486
changed API to account for some implementation changes</li>
tomh@3982
   487
<li> Interference helper and error rate model added </li>
tomh@3982
   488
<li> JakesPropagationLossModel::GetLoss() moved to PropagationLoss() class</li>
tomh@3982
   489
<li> base class WifiChannel made abstract </li>
tomh@3982
   490
<li> WifiNetDevice::SetChannel() removed </li>
tomh@3982
   491
<li> a WifiPhyState helper class added </li>
tomh@3982
   492
<li> addition of the YansWifiChannel and YansWifiPhy classes </li>
tomh@3982
   493
</ul>
tomh@3982
   494
</ul>
tomh@3982
   495
craigdo@3865
   496
<li>17-11-2008; changeset 
craigdo@3865
   497
<a href="http://code.nsnam.org/ns-3-dev/rev/dacfd1f07538">dacfd1f07538</a></li>
craigdo@3865
   498
<ul>
craigdo@3865
   499
<li>
craigdo@3865
   500
Change attribute "RxErrorModel" to "ReceiveErrorModel" in CsmaNetDevice for 
craigdo@3865
   501
consistency between devices.
craigdo@3865
   502
</li>
craigdo@3865
   503
</ul>
craigdo@3865
   504
craigdo@3865
   505
</ul>
craigdo@3865
   506
<h2>changed behavior:</h2>
craigdo@3865
   507
<ul>
craigdo@3865
   508
craigdo@3865
   509
<li>17-11-2008; changeset 
craigdo@3865
   510
<a href="http://code.nsnam.org/ns-3-dev/rev/ed0dfce40459">ed0dfce40459</a></li>
craigdo@3865
   511
<ul>
craigdo@3865
   512
<li>
craigdo@3865
   513
Relax reasonableness testing in Ipv4AddressHelper::SetBase to allow the 
craigdo@3865
   514
assignment of /32 addresses.
craigdo@3865
   515
</li>
craigdo@3865
   516
</ul>
craigdo@3865
   517
craigdo@3949
   518
<li>17-11-2008; changeset 
craigdo@3949
   519
<a href="http://code.nsnam.org/ns-3-dev/rev/756887a9bbea">756887a9bbea</a></li>
craigdo@3949
   520
<ul>
craigdo@3949
   521
<li>
craigdo@3949
   522
Global routing supports bridge devices.
craigdo@3949
   523
</li>
craigdo@3949
   524
</ul>
tomh@3982
   525
</ul>
craigdo@3949
   526
craigdo@3865
   527
<hr>
craigdo@4305
   528
<h1>Changes from ns-3.1 to ns-3.2</h1>
craigdo@3593
   529
craigdo@4305
   530
<h2>New API:</h2>
tomh@3686
   531
<ul>
craigdo@3593
   532
craigdo@3593
   533
<li>26-08-2008; changeset 
craigdo@3593
   534
<a href="http://code.nsnam.org/ns-3-dev/rev/5aa65b1ea001">5aa65b1ea001</a></li>
craigdo@3593
   535
<ul>
craigdo@3593
   536
<li>
craigdo@3593
   537
Add multithreaded and real-time simulator implementation.  Allows for emulated
craigdo@3593
   538
net devices running in threads other than the main simulation thread to schedule
craigdo@3593
   539
events.  Allows for pacing the simulation clock at 1x real-time.
craigdo@3593
   540
</li>
craigdo@3593
   541
</ul>
craigdo@3593
   542
craigdo@3593
   543
craigdo@3593
   544
<li>26-08-2008; changeset 
craigdo@3593
   545
<a href="http://code.nsnam.org/ns-3-dev/rev/c69779f5e51e">c69779f5e51e</a></li>
craigdo@3593
   546
<ul>
craigdo@3593
   547
<li>
craigdo@3593
   548
Add threading and synchronization primitives.  Enabling technology for 
craigdo@3593
   549
multithreaded simulator implementation.
craigdo@3593
   550
</li>
craigdo@3593
   551
</ul>
craigdo@3593
   552
tomh@3686
   553
</ul>
craigdo@4305
   554
<h2>New API in existing classes:</h2>
tomh@3686
   555
<ul>
tomh@3505
   556
tomh@3505
   557
<li>01-08-2008; changeset 
tomh@3505
   558
<a href="http://code.nsnam.org/ns-3-dev/rev/a18520551cdf">a18520551cdf</a></li>
tomh@3505
   559
<ul>
tomh@3505
   560
<li>class ArpCache has two new attributes:  MaxRetries 
tomh@3505
   561
and a Drop trace.  It also has some new public methods but these are 
tomh@3505
   562
mostly for internal use.
tomh@3505
   563
</ul>
tomh@3505
   564
</li>
tomh@3686
   565
tomh@3505
   566
</ul>
craigdo@4305
   567
<h2>Changes to existing API:</h2>
tomh@3686
   568
<ul>
tomh@3505
   569
craigdo@3667
   570
<li>05-09-2008; changeset 
craigdo@3667
   571
<a href="http://code.nsnam.org/ns-3-dev/rev/aa1fb0f43571">aa1fb0f43571</a></li>
craigdo@3667
   572
<ul>
craigdo@3667
   573
<li>
craigdo@3667
   574
Change naming of MTU and packet size attributes in CSMA and Point-to-Point devices<br>
craigdo@3667
   575
After much discussion it was decided that the preferred way to think about 
craigdo@3667
   576
the different senses of transmission units and encapsulations was to call the 
craigdo@3667
   577
MAC MTU simply MTU and to use the overall packet size as the PHY-level attribute
craigdo@3667
   578
of interest.  See the Doxygen of CsmaNetDevice::SetFrameSize and 
craigdo@3667
   579
PointToPointNetDevice::SetFrameSize for a detailed description.
craigdo@3667
   580
</li>
craigdo@3667
   581
</ul>
craigdo@3667
   582
mathieu@3551
   583
<li>25-08-2008; changeset 
mathieu@3551
   584
<a href="http://code.nsnam.org/ns-3-dev/rev/e5ab96db540e">e5ab96db540e</a></li>
mathieu@3551
   585
<ul>
mathieu@3551
   586
<li>
mathieu@3551
   587
bug 273: constify packet pointers.<br>
mathieu@3551
   588
The normal and the promiscuous receive callbacks of the NetDevice API
mathieu@3551
   589
have been changed from:
mathieu@3551
   590
<pre>
ahippo@4637
   591
Callback&lt;bool,Ptr&lt;NetDevice&gt;,Ptr&lt;Packet&gt;,uint16_t,const Address &amp;&gt;
ahippo@4637
   592
Callback&lt;bool,Ptr&lt;NetDevice&gt;, Ptr&lt;Packet&gt;, uint16_t,
ahippo@4637
   593
         const Address &amp;, const Address &amp;, enum PacketType &gt;
mathieu@3551
   594
</pre>
mathieu@3551
   595
to:
mathieu@3551
   596
<pre>
ahippo@4637
   597
Callback&lt;bool,Ptr&lt;NetDevice&gt;,Ptr&lt;const Packet&gt;,uint16_t,const Address &amp;&gt;
ahippo@4637
   598
Callback&lt;bool,Ptr&lt;NetDevice&gt;, Ptr&lt;const Packet&gt;, uint16_t,
ahippo@4637
   599
         const Address &amp;, const Address &amp;, enum PacketType &gt;
mathieu@3551
   600
</pre>
mathieu@3551
   601
to avoid the kind of bugs reported in 
mathieu@3551
   602
<a href="http://www.nsnam.org/bugzilla/show_bug.cgi?id=273">bug 273</a>.
mathieu@3551
   603
Users who implement a subclass of the NetDevice base class need to change the signature
mathieu@3551
   604
of their SetReceiveCallback and SetPromiscReceiveCallback methods.
mathieu@3551
   605
</li>
mathieu@3551
   606
</ul>
mathieu@3551
   607
mathieu@3551
   608
craigdo@3508
   609
<li>04-08-2008; changeset 
craigdo@3508
   610
<a href="http://code.nsnam.org/ns-3-dev/rev/cba7b2b80fe8">cba7b2b80fe8</a></li>
craigdo@3508
   611
<ul>
craigdo@3508
   612
<li>
mathieu@3551
   613
Cleanup of MTU confusion and initialization in CsmaNetDevice<br>
craigdo@3508
   614
The MTU of the CsmaNetDevice defaulted to 65535.  This did not correspond with
craigdo@3508
   615
the expected MTU found in Ethernet-like devices.  Also there was not clear 
craigdo@3508
   616
documentation regarding which MTU was being set.  There are two MTU here, one
craigdo@3508
   617
at the MAC level and one at the PHY level.  We split out the MTU setting to make
craigdo@3508
   618
this more clear and set the default PHY level MTU to 1500 to be more like
craigdo@3508
   619
Ethernet.  The encapsulation mode defaults to LLC/SNAP which then puts the
craigdo@3508
   620
MAC level MTU at 1492 by default.  We allow users to now set the encapsulation
craigdo@3508
   621
mode, MAC MTU and PHY MTU while keeping the three values consistent.  See the
craigdo@3508
   622
Doxygen of CsmaNetDevice::SetMaxPayloadLength for a detailed description of the
craigdo@3508
   623
issues and solution.
craigdo@3508
   624
</li>
craigdo@3508
   625
</ul>
mathieu@3551
   626
tomh@3505
   627
<li>21-07-2008; changeset 
tomh@3505
   628
<a href="
tomh@3505
   629
http://code.nsnam.org/ns-3-dev/rev/99698bc858e8">99698bc858e8</a></li>
tomh@3505
   630
<ul>
tomh@3505
   631
<li> class NetDevice has added a pure virtual method that
tomh@3505
   632
must be implemented by all subclasses:
tomh@3505
   633
<pre>
tomh@3505
   634
virtual void SetPromiscReceiveCallback (PromiscReceiveCallback cb) = 0;
tomh@3505
   635
</pre>
tomh@3505
   636
All NetDevices must support this method, and must call this callback
tomh@3505
   637
when processing packets in the receive direction (the appropriate place
tomh@3505
   638
to call this is device-dependent).  An approach to stub this out
tomh@3505
   639
temporarily, if you do not care about immediately enabling this
tomh@3505
   640
functionality, would be to add this to your device:
tomh@3505
   641
<pre>
tomh@3505
   642
void
tomh@3505
   643
ExampleNetDevice::SetPromiscReceiveCallback
tomh@3505
   644
(NetDevice::PromiscReceiveCallback cb)
tomh@3505
   645
{ 
tomh@3505
   646
  NS_ASSERT_MSG (false, "No implementation yet for
tomh@3505
   647
SetPromiscReceiveCallback");
tomh@3505
   648
}
tomh@3505
   649
</pre>
tomh@3505
   650
To implement this properly, consult the CsmaNetDevice for examples of
tomh@3505
   651
when the m_promiscRxCallback is called.
tomh@3505
   652
</li>
tomh@3505
   653
</ul>
tomh@3505
   654
tomh@3505
   655
<li>03-07-2008; changeset 
tomh@3505
   656
<a href="http://code.nsnam.org/ns-3-dev/rev/d5f8e5fae1c6">d5f8e5fae1c6</a></li>
tomh@3505
   657
<ul>
tomh@3505
   658
<li>
tomh@3505
   659
Miscellaneous cleanup of Udp Helper API, to fix bug 234
tomh@3505
   660
<pre>
tomh@3505
   661
class UdpEchoServerHelper
tomh@3505
   662
{
tomh@3505
   663
public:
tomh@3505
   664
- UdpEchoServerHelper ();
tomh@3505
   665
- void SetPort (uint16_t port); 
tomh@3505
   666
+ UdpEchoServerHelper (uint16_t port);
tomh@3505
   667
+ 
ahippo@4637
   668
+ void SetAttribute (std::string name, const AttributeValue &amp;value);
tomh@3505
   669
ApplicationContainer Install (NodeContainer c);
tomh@3505
   670
tomh@3505
   671
class UdpEchoClientHelper
tomh@3505
   672
{
tomh@3505
   673
public:
tomh@3505
   674
- UdpEchoClientHelper ();
tomh@3505
   675
+ UdpEchoClientHelper (Ipv4Address ip, uint16_t port);
tomh@3505
   676
- void SetRemote (Ipv4Address ip, uint16_t port);
ahippo@4637
   677
- void SetAppAttribute (std::string name, const AttributeValue &amp;value);
ahippo@4637
   678
+ void SetAttribute (std::string name, const AttributeValue &amp;value);
tomh@3505
   679
ApplicationContainer Install (NodeContainer c);
tomh@3505
   680
</pre>
tomh@3505
   681
</li>
tomh@3505
   682
</ul>
mathieu@3551
   683
tomh@3505
   684
<li>03-07-2008; changeset 
tomh@3505
   685
<a href="
tomh@3505
   686
http://code.nsnam.org/ns-3-dev/rev/3cdd9d60f7c7">3cdd9d60f7c7</a></li>
tomh@3505
   687
<ul>
tomh@3505
   688
<li>
tomh@3505
   689
Rename all instances method names using "Set..Parameter" to "Set..Attribute"
tomh@3505
   690
(bug 232)
tomh@3505
   691
</li>
tomh@3505
   692
<li> How to fix your code:  Any use of helper API that was using a method
tomh@3505
   693
"Set...Parameter()" should be changed to read "Set...Attribute()".  e.g.
tomh@3505
   694
<pre>
tomh@3505
   695
- csma.SetChannelParameter ("DataRate", DataRateValue (5000000));
tomh@3505
   696
- csma.SetChannelParameter ("Delay", TimeValue (MilliSeconds (2)));
tomh@3505
   697
+ csma.SetChannelAttribute ("DataRate", DataRateValue (5000000));
tomh@3505
   698
+ csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2)));
tomh@3505
   699
</pre>
tomh@3505
   700
</li>
tomh@3505
   701
</ul>
tomh@3505
   702
</li>
tomh@3686
   703
tomh@3505
   704
</ul>
craigdo@4305
   705
<h2>Changed behavior:</h2>
tomh@3505
   706
<ul>
raj@3645
   707
raj@3645
   708
<li>07-09-2008; changeset 
raj@3645
   709
<a href="http://code.nsnam.org/ns-3-dev/rev/5d836ab1523b">5d836ab1523b</a></li>
raj@3645
   710
<ul>
tomh@3686
   711
raj@3645
   712
<li>
raj@3645
   713
Implement a finite receive buffer for TCP<br>
raj@3645
   714
The native TCP model in TcpSocketImpl did not support a finite receive buffer.
raj@3645
   715
This changeset adds the following functionality in this regard:
raj@3645
   716
<ul>
raj@3645
   717
<li>
raj@3645
   718
Being able to set the receiver buffer size through the attributes system.
raj@3645
   719
</li>
raj@3645
   720
<li>
raj@3645
   721
This receiver buffer size is now correctly exported in the TCP header as the
raj@3645
   722
advertised window.  Prior to this changeset, the TCP header advertised window
raj@3645
   723
was set to the maximum size of 2^16 bytes.
raj@3645
   724
window
raj@3645
   725
</li>
raj@3645
   726
<li>
raj@3645
   727
The aforementioned window size is correctly used for flow control, i.e. the
raj@3645
   728
sending TCP will not send more data than available space in the receiver's
raj@3645
   729
buffer.
raj@3645
   730
</li>
raj@3645
   731
<li>
raj@3645
   732
In the case of a receiver window collapse, when a advertised zero-window
raj@3645
   733
packet is received, the sender enters the persist probing state in which
raj@3645
   734
it sends probe packets with one payload byte at exponentially backed-off
raj@3645
   735
intervals up to 60s.  The reciever will continue to send advertised 
raj@3645
   736
zero-window ACKs of the old data so long as the receiver buffer remains full.
raj@3645
   737
When the receiver window clears up due to an application read, the TCP
raj@3645
   738
will finally ACK the probe byte, and update its advertised window appropriately.
raj@3645
   739
</li>
raj@3645
   740
</ul>
raj@3645
   741
See 
raj@3645
   742
<a href="http://www.nsnam.org/bugzilla/show_bug.cgi?id=239"> bug 239 </a> for
raj@3645
   743
more.
raj@3645
   744
</li>
raj@3645
   745
</ul>
raj@3645
   746
raj@3645
   747
<li>07-09-2008; changeset 
raj@3645
   748
<a href="http://code.nsnam.org/ns-3-dev/rev/7afa66c2b291">7afa66c2b291</a></li>
raj@3645
   749
<ul>
raj@3645
   750
<li>
raj@3645
   751
Add correct FIN exchange behavior during TCP closedown<br>
raj@3645
   752
The behavior of the native TcpSocketImpl TCP model was such that the final
raj@3645
   753
FIN exchange was not correct, i.e. calling Socket::Close didn't send a FIN
raj@3645
   754
packet, and even if it had, the ACK never came back, and even if it had, the
raj@3645
   755
ACK would have incorrect sequence number.  All these various problems have been
raj@3645
   756
addressed by this changeset.  See 
raj@3645
   757
<a href="http://www.nsnam.org/bugzilla/show_bug.cgi?id=242"> bug 242 </a> for
raj@3645
   758
more.
raj@3645
   759
</li>
raj@3645
   760
</ul>
raj@3645
   761
tomh@3505
   762
<li> 28-07-2008; changeset 
tomh@3505
   763
<a href="http://code.nsnam.org/ns-3-dev/rev/6f68f1044df1">6f68f1044df1</a>
tomh@3505
   764
<ul>
tomh@3505
   765
<li>
tomh@3505
   766
OLSR: HELLO messages hold time changed to 3*hello
tomh@3505
   767
interval from hello interval.  This is an important bug fix as
tomh@3505
   768
hold time == refresh time was never intentional, as it leads to
tomh@3505
   769
instability in neighbor detection.
tomh@3505
   770
</ul>
tomh@3505
   771
</li>
tomh@3686
   772
tomh@3505
   773
</ul>
mathieu@3551
   774
tomh@3505
   775
</body>
tomh@3505
   776
</html>