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