File: CHANGES.html

package info (click to toggle)
ns3 3.7.1-7
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 186,596 kB
  • ctags: 507,963
  • sloc: ansic: 1,455,115; cpp: 151,502; python: 72,564; asm: 5,317; perl: 4,801; makefile: 1,107; sh: 1,023; tcl: 295; lex: 230
file content (1063 lines) | stat: -rw-r--r-- 44,366 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <title>ns-3 Change Log</title>
</head>
<body>

<h1>
ns-3: API and model change history</h1>
<!--
This ChangeLog is updated in the reverse order 
with the most recent changes coming first.  Date format:  DD-MM-YYYY
-->
<p>
ns-3 is an evolving system and there will be API or behavioral changes
from time to time.   Users who try to use scripts or models across
versions of ns-3 may encounter problems at compile time, run time, or
may see the simulation output change.  </p>
<p>
We have adopted the development policy that we are going to try to ease
the impact of these changes on users by documenting these changes in a
single place (this file), and not by providing a temporary or permanent
backward-compatibility software layer.  </p>
<p>
The goal is that users who encounter a problem when trying to use older
code with newer code should be able to consult this file to find
guidance as to how to fix the problem.  For instance, if a method name
or signature has changed, it should be stated what the new replacement
name is. </p>
<p>
Note that users who upgrade the simulator across versions, or who work
directly out of the development tree, may find that simulation output
changes even when the compilation doesn't break, such as when a
simulator default value is changed.  Therefore, it is good practice for
_anyone_ using code across multiple ns-3 releases to consult this file,
as well as the RELEASE_NOTES, to understand what has changed over time.
</p>
<p>
This file is a best-effort approach to solving this issue; we will do
our best but can guarantee that there will be things that fall through
the cracks, unfortunately.  If you, as a user, can suggest improvements
to this file based on your experience, please contribute a patch or drop
us a note on ns-developers mailing list.  </p>

<hr>
<h1>Changes from ns-3.6 to ns-3.7</h1>


<h2>Changes to build system:</h2>

<h2>New API:</h2>

<ul>
<li><b>Equal-cost multipath for global routing:</b> Enables quagga's
equal cost multipath for Ipv4GlobalRouting, and adds an attribute that
can enable it with random packet distribution policy across equal cost routes.
<li><b>Binding sockets to devices:</b> A method analogous to a SO_BINDTODEVICE
socket option has been introduced to class Socket:  <pre>virtual void Socket::BindToNetDevice (Ptr&lt;NetDevice&gt; netdevice);</pre>
<li><b>Simulator event contexts</b>: The Simulator API now keeps track of a per-event
'context' (a 32bit integer which, by convention identifies a node by its id). Simulator::GetContext
returns the context of the currently-executing event while Simulator::ScheduleWithContext creates an
event with a context different from the execution context of the caller. This API is used
by the ns-3 logging system to report the execution context of each log line.
<li><b>Object::DoStart</b>: Users who need to complete their object setup at the start of a simulation
can override this virtual method, perform their adhoc setup, and then, must chain up to their parent.
<li><b>Aod hoc On-Demand Distance Vector (AODV)</b> routing model, 
<a href=http://www.ietf.org/rfc/rfc3561.txt>RFC 3561</a> </li>
<li><b>Ipv4::IsDestinationAddress (Ipv4Address address, uint32_t iif)</b> Method added to support checks of whether a destination address should be accepted 
as one of the host's own addresses.  RFC 1122 Strong/Weak end system behavior can be changed with a new attribute (WeakEsModel) in class Ipv4.  </li>

<li><b>Net-anim interface</b>: Provides an interface to net-anim, a network animator for point-to-point 
links in ns-3.  The interface generates a custom trace file for use with the NetAnim program.</li>

<li><b>Topology Helpers</b>: New topology helpers have been introduced including PointToPointStarHelper, 
PointToPointDumbbellHelper, PointToPointGridHelper, and CsmaStarHelper.</li>

<li><b>IPv6 extensions support</b>: Provides API to add IPv6 extensions and options. Two examples (fragmentation
and loose routing) are available.</li>
</ul>

<h2>Changes to existing API:</h2>
<ul>
<li><b>Ipv4RoutingProtocol::RouteOutput</b> no longer takes an outgoing 
interface index but instead takes an outgoing device pointer; this affects all
subclasses of Ipv4RoutingProtocol.
<pre>
-  virtual Ptr&lt;Ipv4Route&gt; RouteOutput (Ptr&lt;Packet&gt; p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr) = 0;
+  virtual Ptr&lt;Ipv4Route&gt; RouteOutput (Ptr&lt;Packet&gt; p, const Ipv4Header &header, Ptr&lt;NetDevice&gt; oif, Socket::SocketErrno &sockerr) = 0;
</pre>
<li><b>Ipv6RoutingProtocol::RouteOutput</b> no longer takes an outgoing 
interface index but instead takes an outgoing device pointer; this affects all
subclasses of Ipv6RoutingProtocol.
<pre>
-  virtual Ptr&lt;Ipv6Route&gt; RouteOutput (Ptr&lt;Packet&gt; p, const Ipv6Header &header, uint32_t oif, Socket::SocketErrno &sockerr) = 0;
+  virtual Ptr&lt;Ipv6Route&gt; RouteOutput (Ptr&lt;Packet&gt; p, const Ipv6Header &header, Ptr&lt;NetDevice&gt; oif, Socket::SocketErrno &sockerr) = 0;
</pre>
<li><b>Application::Start</b> and <b>Application::Stop</b> have been renamed to
<b>Application::SetStartTime</b> and <b>Application::SetStopTime</b>.
<li><b>Channel::Send</b>: this method does not really exist but each subclass of the Channel
base class must implement a similar method which sends a packet from a node to another node.
Users must now use Simulator::ScheduleWithContext instead of Simulator::Schedule to schedule
the reception event on a remote node.<br>
For example, before:
<pre>
void
SimpleChannel::Send (Ptr&lt;Packet&gt; p, uint16_t protocol, 
		     Mac48Address to, Mac48Address from,
		     Ptr&lt;SimpleNetDevice&gt; sender)
{
  for (std::vector&lt;Ptr&lt;SimpleNetDevice&gt; &gt;::const_iterator i = m_devices.begin (); i != m_devices.end (); ++i)
    {
      Ptr&lt;SimpleNetDevice&gt; tmp = *i;
      if (tmp == sender)
	{
	  continue;
	}
      Simulator::ScheduleNow (&SimpleNetDevice::Receive, tmp, p->Copy (), protocol, to, from);
    }
}
</pre>
After:
<pre>
void
SimpleChannel::Send (Ptr&lt;Packet&gt; p, uint16_t protocol, 
		     Mac48Address to, Mac48Address from,
		     Ptr&lt;SimpleNetDevice&gt; sender)
{
  for (std::vector&lt;Ptr&lt;SimpleNetDevice&gt; &gt;::const_iterator i = m_devices.begin (); i != m_devices.end (); ++i)
    {
      Ptr&lt;SimpleNetDevice&gt; tmp = *i;
      if (tmp == sender)
	{
	  continue;
	}
      Simulator::ScheduleWithContext (tmp->GetNode ()->GetId (), Seconds (0),
                                      &SimpleNetDevice::Receive, tmp, p->Copy (), protocol, to, from);
    }
}
</pre>

<li><b>Simulator::SetScheduler</b>: this method now takes an ObjectFactory
instead of an object pointer directly. Existing callers can trivially be
updated to use this new method.<br>
Before:
<pre>
Ptr&lt;Scheduler&gt; sched = CreateObject&lt;ListScheduler&gt; ();
Simulator::SetScheduler (sched);
</pre>
After:
<pre>
ObjectFactory sched;
sched.SetTypeId ("ns3::ListScheduler");
Simulator::SetScheduler (sched);
</pre>

<li> Extensions to IPv4 <b>Ping</b> application: verbose output and the ability to configure different ping 
sizes and time intervals (via new attributes)

<li><b>Topology Helpers</b>: Previously, topology helpers such as a point-to-point star existed in the 
PointToPointHelper class in the form of a method (ex: PointToPointHelper::InstallStar).  These topology 
helpers have been pulled out of the specific helper classes and created as separate classes.  Several 
different topology helper classes now exist including PointToPointStarHelper, PointToPointGridHelper, 
PointToPointDumbbellHelper, and CsmaStarHelper.  For example, a user wishes to create a 
point-to-point star network:<br>
Before:
<pre>
NodeContainer hubNode;
NodeContainer spokeNodes;
hubNode.Create (1);
Ptr&lt;Node&gt; hub = hubNode.Get (0);
spokeNodes.Create (nNodes - 1);

PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));
NetDeviceContainer hubDevices, spokeDevices;
pointToPoint.InstallStar (hubNode.Get (0), spokeNodes, hubDevices, spokeDevices);
</pre>
After:
<pre>
PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));
PointToPointStarHelper star (nSpokes, pointToPoint);
</pre>

</li>

</ul>

<h2>Changed behavior:</h2>
<ul>
<li> Changed default value of YansWifiPhy::EnergyDetectionThreshold from
-140.0 dBm to -96.0 dBm.  Changed default value of 
YansWifiPhy::CcaModelThreshold from -140.0 dBm to -99.0 dBm.  Rationale
can be found <a href="http://www.nsnam.org/bugzilla/show_bug.cgi?id=689"> 
here</a>.
</li>
<li> Default TTL of IPv4 broadcast datagrams changed from 1 to 64.</li>
<li> Changed DcfManager::UpdateBackoff (): using flooring instead of rounding in calculation of remaining slots. <a href="http://www.nsnam.org/bugzilla/show_bug.cgi?id=695">
  See bug 695.</a></li>
</ul>


<hr>
<h1>Changes from ns-3.5 to ns-3.6</h1>

<h2>Changes to build system:</h2>
<ul>
<li><b>A new test framework is provided with ns-3.6 that primarilay runs outside waf</b>
<p>"./waf check" now runs the new unit tests of the core part of ns-3.6.  
In order to run the complete test package, use "./test.py" which is 
documented in a new manual -- find it in ./doc/testing.  "./waf check"
no longer generates the introspected Doxygen.  Now use "./waf doxygen"
to do this and generate the Doxygen documentation in one step.
</p>
</ul>

<h2>New API:</h2>
<ul>
<li><b>Longest prefix match, support for metrics, for Ipv4StaticRouting and Ipv6StaticRouting</b>
<p>When performing route lookup, first match for longest prefix, and then
based on metrics (default metric = 0).  If metrics are equal, most recent
addition is picked.  Extends API for support of metrics but preserves
backward compatibility.  One small change is that the default route
is no longer stored as index 0 route in the host route table so 
GetDefaultRoute () must be used.
</p>
</li>
<li><b>Route injection for global routing</b>
<p>Add ability to inject and withdraw routes to Ipv4GlobalRouting.  This
allows a user to insert a route and have it redistributed like an OSPF
external LSA to the rest of the topology.
</p>
</li>

<li><b>Athstats</b>
<p>New classes AthstatsWifiTraceSink and AthstatsHelper.
</p>
</li>
<li><b>WifiRemoteStationManager </b>
<p>New trace sources exported by WifiRemoteStationManager: MacTxRtsFailed, MacTxDataFailed, MacTxFinalRtsFailed and MacTxFinalDataFailed.
</p>
</li>

<li><b> IPv6 additions</b>
<p> Add an IPv6 protocol and ICMPv6 capability.
<ul>
<li> new classes Ipv6, Ipv6Interface, Ipv6L3Protocol, Ipv6L4Protocol
<li> Ipv6RawSocket (no UDP or TCP capability yet)
<li> a set of classes to implement Icmpv6, including neighbor discovery,
router solicitation, DAD
<li> new applications Ping6 and Radvd
<li> routing objects Ipv6Route and Ipv6MulticastRoute
<li> routing protocols Ipv6ListRouting and Ipv6StaticRouting
<li> examples: icmpv6-redirect.cc, ping6.cc, radvd.cc, radvd-two-prefix.cc, simple-routing-ping6.cc
</ul>
</p>
</li> 

<li><b>Wireless Mesh Networking models</b>
<ul>
<p>
<li> General multi-interface mesh stack infrastructure (devices/mesh module).
<li> IEEE 802.11s (Draft 3.0) model including Peering Management Protocol and HWMP.
<li> Forwarding Layer for Meshing (FLAME) protocol.
</ul>
</p>
</li>

<li><b>802.11 enhancements</b>
<p>
<ul>
<li> 10MHz and 5MHz channel width supported by 802.11a model (Ramon Bauza and Kirill Andreev).
</ul>
<ul>
<li> Channel switching support. YansWifiPhy can now switch among different channels (Ramon Bauza and Pavel Boyko).
</ul>
</p>
</li>

<li><b> Nix-vector Routing</b>
<p> Add nix-vector routing protocol
<ul>
<li> new helper class Ipv4NixVectorHelper
</ul>
<ul>
<li> examples: nix-simple.cc, nms-p2p-nix.cc
</ul> 
</p>
</li>

<li><b>New Test Framework</b>
<p> Add TestCase, TestSuite classes
<ul>
<li> examples: src/core/names-test-suite.cc, src/core/random-number-test-suite.cc, src/test/ns3tcp/ns3tcp-cwnd-test-suite.cc
</ul> 
</p>
</li>

</ul>

<h2>Changes to existing API:</h2>
<ul>
<li><b>InterferenceHelper</b>
<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>
<p> The following member methods have been added to InterferenceHelper:</p>
<pre>
  static WifiMode GetPlcpHeaderMode (WifiMode, WifiPreamble);
  static uint32_t GetPlcpHeaderDurationMicroSeconds (WifiMode, WifiPreamble);
  static uint32_t GetPlcpPreambleDurationMicroSeconds (WifiMode, WifiPreamble);
  static uint32_t GetPayloadDurationMicroSeconds (size, WifiMode); </pre>
<p> The following member methods have been removed from InterferenceHelper:</p>
<pre>
  void Configure80211aParameters (void);
  void Configure80211bParameters (void);
  void Configure80211_10MhzParameters (void);
  void Configure80211_5MhzParameters (void);</pre>
</li>
<li><b>WifiMode</b>
<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>
</li>
<li><b>NetDevice</b>
<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>
<pre>
- virtual void SetLinkChangeCallback (Callback&lt;void&gt; callback);
+ virtual void AddLinkChangeCallback (Callback&lt;void&gt; callback);</pre>
Now each NetDevice subclasses have a TracedCallback&lt;&gt; object (list of callbacks) instead of Callback&lt;void&gt; ones.
</li>
</ul>

<hr>
<h1>Changes from ns-3.4 to ns-3.5</h1>

<h2>Changes to build system:</h2>
<ul>
</ul>

<h2>New API:</h2>

<ul>
<li><b>YansWifiPhyHelper supporting radiotap and prism PCAP output</b>
<p>The newly supported pcap formats can be adopted by calling the following new method of YansWifiPhyHelper:</p>
<pre>
 +  void SetPcapFormat (enum PcapFormat format);
</pre>
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>
</li>

<li> <b>attributes for class Ipv4</b>
<p> class Ipv4 now contains attributes in ipv4.cc; the first one
is called "IpForward" that will enable/disable Ipv4 forwarding.  
</li>

<li> <b>packet tags</b>
<p>class Packet now contains AddPacketTag, RemovePacketTag and PeekPacketTag 
which can be used to attach a tag to a packet, as opposed to the old 
AddTag method which attached a tag to a set of bytes. The main 
semantic difference is in how these tags behave in the presence of 
fragmentation and reassembly.
</li>

</ul>

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

<li><b>Ipv4Interface::GetMtu () deleted</b>
  <p>The Ipv4Interface API is private to internet-stack module; this method
was just a pass-through to GetDevice ()-&gt;GetMtu ().
  </p>
</li>

<li><b>GlobalRouteManager::PopulateRoutingTables () and RecomputeRoutingTables () are deprecated </b>
  <p>This API has been moved to the helper API and the above functions will
be removed in ns-3.6.  The new API is:
<pre>
Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
Ipv4GlobalRoutingHelper::RecomputeRoutingTables ();
</pre>
Additionally, these low-level functions in GlobalRouteManager are now public,
allowing more API flexibility at the low level ns-3 API:
<pre>
GlobalRouteManager::DeleteGlobalRoutes ();
GlobalRouteManager::BuildGlobalRoutingDatabase ();
GlobalRouteManager::InitializeRoutes ();
</pre>
  </p>
</li>

<li><b>CalcChecksum attribute changes</b>
  <p>Four IPv4 CalcChecksum attributes (which enable the computation of 
checksums that are disabled by default) have been collapsed into one global 
value in class Node.  These four calls: 
<pre>
Config::SetDefault ("ns3::Ipv4L3Protocol::CalcChecksum", BooleanValue (true)); 
Config::SetDefault ("ns3::Icmpv4L4Protocol::CalcChecksum", BooleanValue (true));
Config::SetDefault ("ns3::TcpL4Protocol::CalcChecksum", BooleanValue (true));
Config::SetDefault ("ns3::UdpL4Protocol::CalcChecksum", BooleanValue (true));
</pre>
are replaced by one call to:
<pre>
GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
</pre>
  </p>
</li>

<li><b>CreateObject changes</b>
  <p>CreateObject is now able to construct objects with a non-default constructor.
   If you used to pass attribute lists to CreateObject, you must now use CreateObjectWithAttributes.
  </p>
</li>

<li> <b>packet byte tags renaming</b>
  <ul>
  <li>Packet::AddTag to Packet::AddByteTag</li>
  <li>Packet::FindFirstMatchingTag to Packet::FindFirstMatchingByteTag</li>
  <li>Packet::RemoveAllTags to Packet::RemoveAllByteTags</li>
  <li>Packet::PrintTags to Packet::PrintByteTags</li>
  <li>Packet::GetTagIterator to Packet::GetByteTagIterator</li>
  </ul>
</li>

<li><b>YansWifiPhyHelper::EnablePcap* methods not static any more</b>
<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:
<pre>
-  static void EnablePcap (std::string filename, uint32_t nodeid, uint32_t deviceid);
+         void EnablePcap (std::string filename, uint32_t nodeid, uint32_t deviceid);
-  static void EnablePcap (std::string filename, Ptr&lt;NetDevice&gt; nd);
+         void EnablePcap (std::string filename, Ptr&lt;NetDevice&gt; nd);
-  static void EnablePcap (std::string filename, std::string ndName);
+         void EnablePcap (std::string filename, std::string ndName);
-  static void EnablePcap (std::string filename, NetDeviceContainer d);
+         void EnablePcap (std::string filename, NetDeviceContainer d);
-  static void EnablePcap (std::string filename, NodeContainer n);
+         void EnablePcap (std::string filename, NodeContainer n);
-  static void EnablePcapAll (std::string filename);
+         void EnablePcapAll (std::string filename);
</pre>
</p>
</li>

<li><b>Wifi Promisc Sniff interface modified </b>
<p> 
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:
<pre>
-  void NotifyPromiscSniff (Ptr&lt;const Packet&gt; packet);
+  void NotifyPromiscSniffRx (Ptr&lt;const Packet&gt; packet, uint16_t channelFreqMhz, uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm);
+  void NotifyPromiscSniffTx (Ptr&lt;const Packet&gt; packet, uint16_t channelFreqMhz, uint32_t rate, bool isShortPreamble);
-  TracedCallback&lt;Ptr&lt;const Packet&gt; &gt; m_phyPromiscSnifferTrace;
+  TracedCallback&lt;Ptr&lt;const Packet&gt;, uint16_t, uint32_t, bool, double, double&gt; m_phyPromiscSniffRxTrace;
+  TracedCallback&lt;Ptr&lt;const Packet&gt;, uint16_t, uint32_t, bool&gt; m_phyPromiscSniffTxTrace;
</pre>
The above mentioned callbacks are expected to be used to call the following method to write Wifi PCAP traces in promiscuous mode:
<pre>
+  void WriteWifiMonitorPacket(Ptr&lt;const Packet&gt; packet, uint16_t channelFreqMhz, uint32_t rate, bool isShortPreamble, bool isTx, double signalDbm, double noiseDbm);
</pre>
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
</p>
</li>

<li><b> Routing decoupled from class Ipv4</b>
<p> All calls of the form "Ipv4::AddHostRouteTo ()" etc. (i.e. to 
add static routes, both unicast and multicast) have been moved to a new 
class Ipv4StaticRouting.  In addition, class Ipv4 now holds only
one possible routing protocol; the previous way to add routing protocols
(by ordered list of priority) has been moved to a new class Ipv4ListRouting.
Class Ipv4 has a new minimal routing API (just to set and get the routing
protocol):
<pre>
-  virtual void AddRoutingProtocol (Ptr&lt;Ipv4RoutingProtocol&gt; routingProtocol, int16_t priority) = 0;
+  virtual void SetRoutingProtocol (Ptr&lt;Ipv4RoutingProtocol&gt; routingProtocol) = 0;
+  virtual Ptr&lt;Ipv4RoutingProtocol&gt; GetRoutingProtocol (void) const = 0;
</pre>
</li>

<li><b> class Ipv4RoutingProtocol is refactored</b>
<p> The abstract base class Ipv4RoutingProtocol has been refactored to
align with corresponding Linux Ipv4 routing architecture, and has been
moved from ipv4.h to a new file ipv4-routing-protocol.h.  The new
methods (RouteOutput () and RouteInput ()) are aligned with Linux 
ip_route_output() and ip_route_input().  However,
the general nature of these calls (synchronous routing lookup for
locally originated packets, and an asynchronous, callback-based lookup
for forwarded packets) is still the same.
<pre>
-  typedef Callback&lt;void, bool, const Ipv4Route&amp;, Ptr&lt;Packet&gt;, const Ipv4Header&amp;&gt; RouteReplyCallback;
+  typedef Callback&lt;void, Ptr&lt;Ipv4Route&gt;, Ptr&lt;const Packet&gt;, const Ipv4Header &amp;&gt; UnicastForwardCallback;
+  typedef Callback&lt;void, Ptr&lt;Ipv4MulticastRoute&gt;, Ptr&lt;const Packet&gt;, const Ipv4Header &amp;&gt; MulticastForwardCallback;
+  typedef Callback&lt;void, Ptr&lt;const Packet&gt;, const Ipv4Header &amp;, uint32_t &gt; LocalDeliverCallback;
+  typedef Callback&lt;void, Ptr&lt;const Packet&gt;, const Ipv4Header &amp;&gt; ErrorCallback;
-  virtual bool RequestInterface (Ipv4Address destination, uint32_t&amp; interface) = 0;
+  virtual Ptr&lt;Ipv4Route&gt; RouteOutput (Ptr&lt;Packet&gt; p, const Ipv4Header &amp;header, uint32_t oif, Socket::SocketErrno &amp;errno) = 0;
-  virtual bool RequestRoute (uint32_t interface,
-                            const Ipv4Header &amp;ipHeader,
-                            Ptr&lt;Packet&gt; packet,
-                            RouteReplyCallback routeReply) = 0;
+  virtual bool RouteInput  (Ptr&lt;const Packet&gt; p, const Ipv4Header &amp;header, Ptr&lt;const NetDevice&gt; idev,
+                             UnicastForwardCallback ucb, MulticastForwardCallback mcb,
+                             LocalDeliverCallback lcb, ErrorCallback ecb) = 0;
</pre>

</li>
<li><b> previous class Ipv4Route, Ipv4MulticastRoute renamed; new classes with
those same names added</b>
<p> The previous class Ipv4Route and Ipv4MulticastRoute are used by 
Ipv4StaticRouting and Ipv4GlobalRouting to record internal routing table
entries, so they were renamed to class Ipv4RoutingTableEntry and
Ipv4MulticastRoutingTableEntry, respectively.  In their place, new
class Ipv4Route and class Ipv4MulticastRoute have been added.  These
are reference-counted objects that are analogous to Linux struct
rtable and struct mfc_cache, respectively, to achieve better compatibility
with Linux routing architecture in the future.  

<li><b> class Ipv4 address-to-interface mapping functions changed</b>
<p>  There was some general cleanup of functions that involve mappings
from Ipv4Address to either NetDevice or Ipv4 interface index.  
<pre>
-  virtual uint32_t FindInterfaceForAddr (Ipv4Address addr) const = 0;
-  virtual uint32_t FindInterfaceForAddr (Ipv4Address addr, Ipv4Mask mask) const = 0;
+  virtual int32_t GetInterfaceForAddress (Ipv4Address address) const = 0;
+  virtual int32_t GetInterfaceForPrefix (Ipv4Address address, Ipv4Mask mask) const = 0;
-  virtual int32_t FindInterfaceForDevice(Ptr&lt;NetDevice&gt; nd) const = 0;
+  virtual int32_t GetInterfaceForDevice (Ptr&lt;const NetDevice&gt; device) const = 0;
-  virtual Ipv4Address GetSourceAddress (Ipv4Address destination) const = 0;
-  virtual bool GetInterfaceForDestination (Ipv4Address dest,
-  virtual uint32_t GetInterfaceByAddress (Ipv4Address addr, Ipv4Mask mask = Ipv4Mask("255.255.255.255"));
</pre>

<li><b> class Ipv4 multicast join API deleted</b>
<p> The following methods are not really used in present form since IGMP
is not being generated, so they have been removed (planned to be replaced
by multicast socket-based calls in the future):

<pre>
- virtual void JoinMulticastGroup (Ipv4Address origin, Ipv4Address group) = 0;
- virtual void LeaveMulticastGroup (Ipv4Address origin, Ipv4Address group) = 0;
</pre>


<li><b>Deconflict NetDevice::ifIndex and Ipv4::ifIndex (bug 85).</b>
<p>All function parameters named "ifIndex" that refer 
to an Ipv4 interface are instead named "interface".
<pre>
- static const uint32_t Ipv4RoutingProtocol::IF_INDEX_ANY = 0xffffffff;
+ static const uint32_t Ipv4RoutingProtocol::INTERFACE_ANY = 0xffffffff;

- bool Ipv4RoutingProtocol::RequestIfIndex (Ipv4Address destination, uint32_t&amp; ifIndex);
+ bool Ipv4RoutingProtocol::RequestInterface (Ipv4Address destination, uint32_t&amp; interface);
(N.B. this particular function is planned to be renamed to RouteOutput() in the
proposed IPv4 routing refactoring)

- uint32_t Ipv4::GetIfIndexByAddress (Ipv4Address addr, Ipv4Mask mask);
+ int_32t Ipv4::GetInterfaceForAddress (Ipv4Address address, Ipv4Mask mask) const;

- bool Ipv4::GetIfIndexForDestination (Ipv4Address dest, uint32_t &amp;ifIndex) const;
+ bool Ipv4::GetInterfaceForDestination (Ipv4Address dest, uint32_t &amp;interface) const;
(N.B. this function is not needed in the proposed Ipv4 routing refactoring)
</pre>


<li><b>Allow multiple IPv4 addresses to be assigned to an interface (bug 188)</b>
  <ul>
  <li> Add class Ipv4InterfaceAddress:  
  This is a new class to resemble Linux's struct in_ifaddr.  It holds IP addressing information, including mask,
  broadcast address, scope, whether primary or secondary, etc.
  <pre>
+  virtual uint32_t AddAddress (uint32_t interface, Ipv4InterfaceAddress address) = 0;
+  virtual Ipv4InterfaceAddress GetAddress (uint32_t interface, uint32_t addressIndex) const = 0;
+  virtual uint32_t GetNAddresses (uint32_t interface) const = 0;
  </pre>
  <li>Regarding legacy API usage, typically where you once did the following,
  using the public Ipv4 class interface (e.g.):
  <pre>
  ipv4A-&gt;SetAddress (ifIndexA, Ipv4Address ("172.16.1.1"));
  ipv4A-&gt;SetNetworkMask (ifIndexA, Ipv4Mask ("255.255.255.255"));
  </pre>
  you now do:
  <pre>
  Ipv4InterfaceAddress ipv4IfAddrA = Ipv4InterfaceAddress (Ipv4Address ("172.16.1.1"), Ipv4Mask ("255.255.255.255"));
  ipv4A-&gt;AddAddress (ifIndexA, ipv4IfAddrA);
  </pre>
  <li> At the helper API level, one often gets an address from an interface
  container.  We preserve the legacy GetAddress (uint32_t i) but it
  is documented that this will return only the first (address index 0)
  address on the interface, if there are multiple such addresses. 
  We provide also an overloaded variant for the multi-address case: 

  <pre>
Ipv4Address Ipv4InterfaceContainer::GetAddress (uint32_t i)
+ Ipv4Address Ipv4InterfaceContainer::GetAddress (uint32_t i, uint32_t j)
  </pre>

  </ul>

<li><b>New WifiMacHelper objects</b>
<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>
  <pre>
- void WifiHelper::SetMac (std::string type, std::string n0 = "", const AttributeValue &amp;v0 = EmptyAttributeValue (),...)

- NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phyHelper, NodeContainer c) const
+ NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phyHelper, const WifiMacHelper &amp;macHelper, NodeContainer c) const

- NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phy, Ptr&lt;Node&gt; node) const
+ NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phy, const WifiMacHelper &amp;mac, Ptr&lt;Node&gt; node) const

- NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phy, std::string nodeName) const
+ NetDeviceContainer WifiHelper::Install (const WifiPhyHelper &amp;phy, const WifiMacHelper &amp;mac, std::string nodeName) const
  </pre>
  See src/helper/nqos-wifi-mac-helper.h and src/helper/qos-wifi-mac-helper.h for more details.
  </p>

<li><b>Remove Mac48Address::IsMulticast</b>
  <p>This method was considered buggy and unsafe to call. Its replacement is Mac48Address::IsGroup.
  </li>

</ul>

<h2>Changed behavior:</h2>
<ul>
</ul>

<hr>
<h1>Changes from ns-3.3 to ns-3.4</h1>

<h2>Changes to build system:</h2>
<ul>
<li>A major option regarding the downloading and building of ns-3 has been
added for ns-3.4 -- the ns-3-allinone feature.  This allows a user to
get the most common options for ns-3 downloaded and built with a minimum
amount of trouble.  See the ns-3 tutorial for a detailed explanation of
how to use this new feature.</li>

<li>The build system now runs build items in parallel by default.  This includes
the regression tests.</li>
</ul>

<h2>New API:</h2>
<ul>
<li>XML support has been added to the ConfigStore in src/contrib/config-store.cc</li>

<li>The ns-2 calendar queue scheduler option has been ported to src/simulator</li>

<li>A ThreeLogDistancePropagationLossModel has been added to src/devices/wifi</li>

<li>ConstantAccelerationMobilityModel in src/mobility/constant-acceleration-mobility-model.h</li>

<li>A new emulation mode is supported with the TapBridge net device (see
src/devices/tap-bridge)</li>

<li>A new facility for naming ns-3 Objects is included (see
src/core/names.{cc,h})</li>

<li>Wifi multicast support has been added in src/devices/wifi</li>
</ul>

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

<ul>
<li>Some fairly significant changes have been made to the API of the
random variable code.  Please see the ns-3 manual and src/core/random-variable.cc
for details.</li>

<li>The trace sources in the various NetDevice classes has been completely
reworked to allow for a consistent set of trace sources across the
devices.  The names of the trace sources have been changed to provide
some context with respect to the level at which the trace occurred.
A new set of trace sources has been added which emulates the behavior
of packet sniffers.  These sources have been used to implement tcpdump-
like functionality and are plumbed up into the helper classes.  The 
user-visible changes are the trace source name changes and the ability
to do promiscuous-mode pcap tracing via helpers.  For further information
regarding these changes, please see the ns-3 manual</li>

<li>StaticMobilityModel has been renamed ConstantPositionMobilityModel
StaticSpeedMobilityModel has been renamed ConstantVelocityMobilityModel</li>

<li>The Callback templates have been extended to support more parameters.
See src/core/callback.h</li>

<li>Many helper API have been changed to allow passing Object-based parameters
as string names to ease working with the object name service.</li>

<li>The Config APIs now accept path segments that are names defined by the
object name service.</li>

<li>Minor changes were made to make the system build under the Intel C++ compiler.</li>

<li>Trace hooks for association and deassociation to/from an access point were
added to src/devices/wifi/nqsta-wifi-mac.cc</li>
</ul>

<h2>Changed behavior:</h2>

<ul>
<li>The tracing system rework has introduced some significant changes in the
behavior of some trace sources, specifically in the positioning of trace sources
in the device code.  For example, there were cases where the packet transmit 
trace source was hit before the packet was enqueued on the device transmit quueue.
This now happens just before the packet is transmitted over the channel medium.
The scope of the changes is too large to be included here.  If you have concerns
regarding trace semantics, please consult the net device documentation for details.
As is usual, the ultimate source for documentation is the net device source code.</li>
</ul>

<hr>
<h1>Changes from ns-3.2 to ns-3.3</h1>

<h2>New API:</h2>
<ul>
<li>
ns-3 ABORT macros in src/core/abort.h
Config::MatchContainer
ConstCast and DynamicCast helper functions for Ptr casting
StarTopology added to several topology helpers
NetDevice::IsBridge () 
</li>

<li>17-11-2008; changeset 
<a href="http://code.nsnam.org/ns-3-dev/rev/4c1c3f6bcd03">4c1c3f6bcd03</a></li>
<ul>
<li>
The PppHeader previously defined in the point-to-point-net-device code has been 
made public.
</li>
</ul>

<li>17-11-2008; changeset 
<a href="http://code.nsnam.org/ns-3-dev/rev/16c2970a0344">16c2970a0344</a></li>
<ul>
<li>
An emulated net device has been added as enabling technology for ns-3 emulation
scenarios.  See src/devices/emu and examples/emu-udp-echo.cc for details.
</li>
</ul>

<li>17-11-2008; changeset 
<a href="http://code.nsnam.org/ns-3-dev/rev/4222173d1e6d">4222173d1e6d</a></li>
<ul>
<li>
Added method InternetStackHelper::EnableAsciiChange to allow allow a user to 
hook ascii trace to the drop trace events in Ipv4L3Protocol and ArpL3Protocol.
</li>
</ul>

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

<li> NetDevice::MakeMulticastAddress() was renamed to NetDevice::GetMulticast()
and the original GetMulticast() removed </li>

<li> Socket API changes:
<ul>
<li> return type of SetDataSentCallback () changed from bool to void </li>
<li> Socket::Listen() no longer takes a queueLimit argument</li>
</ul>

<li> As part of the Wifi Phy rework, there have been several API changes
at the low level and helper API level.  </li>
<ul>
<li>  At the helper API level, the WifiHelper was split to three classes: 
a WifiHelper, a YansWifiChannel helper, and a YansWifiPhy helper.  Some
functions like Ascii and Pcap tracing functions were moved from class
WifiHelper to class YansWifiPhyHelper. 
<li>  At the low-level API, there have been a number of changes to
make the Phy more modular:</li>
<ul>
<li> composite-propagation-loss-model.h is removed</li>
<li> DcfManager::NotifyCcaBusyStartNow() has changed name</li>
<li> fragmentation related functions (e.g. DcaTxop::GetNFragments()) have
changed API to account for some implementation changes</li>
<li> Interference helper and error rate model added </li>
<li> JakesPropagationLossModel::GetLoss() moved to PropagationLoss() class</li>
<li> base class WifiChannel made abstract </li>
<li> WifiNetDevice::SetChannel() removed </li>
<li> a WifiPhyState helper class added </li>
<li> addition of the YansWifiChannel and YansWifiPhy classes </li>
</ul>
</ul>

<li>17-11-2008; changeset 
<a href="http://code.nsnam.org/ns-3-dev/rev/dacfd1f07538">dacfd1f07538</a></li>
<ul>
<li>
Change attribute "RxErrorModel" to "ReceiveErrorModel" in CsmaNetDevice for 
consistency between devices.
</li>
</ul>

</ul>
<h2>changed behavior:</h2>
<ul>

<li>17-11-2008; changeset 
<a href="http://code.nsnam.org/ns-3-dev/rev/ed0dfce40459">ed0dfce40459</a></li>
<ul>
<li>
Relax reasonableness testing in Ipv4AddressHelper::SetBase to allow the 
assignment of /32 addresses.
</li>
</ul>

<li>17-11-2008; changeset 
<a href="http://code.nsnam.org/ns-3-dev/rev/756887a9bbea">756887a9bbea</a></li>
<ul>
<li>
Global routing supports bridge devices.
</li>
</ul>
</ul>

<hr>
<h1>Changes from ns-3.1 to ns-3.2</h1>

<h2>New API:</h2>
<ul>

<li>26-08-2008; changeset 
<a href="http://code.nsnam.org/ns-3-dev/rev/5aa65b1ea001">5aa65b1ea001</a></li>
<ul>
<li>
Add multithreaded and real-time simulator implementation.  Allows for emulated
net devices running in threads other than the main simulation thread to schedule
events.  Allows for pacing the simulation clock at 1x real-time.
</li>
</ul>


<li>26-08-2008; changeset 
<a href="http://code.nsnam.org/ns-3-dev/rev/c69779f5e51e">c69779f5e51e</a></li>
<ul>
<li>
Add threading and synchronization primitives.  Enabling technology for 
multithreaded simulator implementation.
</li>
</ul>

</ul>
<h2>New API in existing classes:</h2>
<ul>

<li>01-08-2008; changeset 
<a href="http://code.nsnam.org/ns-3-dev/rev/a18520551cdf">a18520551cdf</a></li>
<ul>
<li>class ArpCache has two new attributes:  MaxRetries 
and a Drop trace.  It also has some new public methods but these are 
mostly for internal use.
</ul>
</li>

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

<li>05-09-2008; changeset 
<a href="http://code.nsnam.org/ns-3-dev/rev/aa1fb0f43571">aa1fb0f43571</a></li>
<ul>
<li>
Change naming of MTU and packet size attributes in CSMA and Point-to-Point devices<br>
After much discussion it was decided that the preferred way to think about 
the different senses of transmission units and encapsulations was to call the 
MAC MTU simply MTU and to use the overall packet size as the PHY-level attribute
of interest.  See the Doxygen of CsmaNetDevice::SetFrameSize and 
PointToPointNetDevice::SetFrameSize for a detailed description.
</li>
</ul>

<li>25-08-2008; changeset 
<a href="http://code.nsnam.org/ns-3-dev/rev/e5ab96db540e">e5ab96db540e</a></li>
<ul>
<li>
bug 273: constify packet pointers.<br>
The normal and the promiscuous receive callbacks of the NetDevice API
have been changed from:
<pre>
Callback&lt;bool,Ptr&lt;NetDevice&gt;,Ptr&lt;Packet&gt;,uint16_t,const Address &amp;&gt;
Callback&lt;bool,Ptr&lt;NetDevice&gt;, Ptr&lt;Packet&gt;, uint16_t,
         const Address &amp;, const Address &amp;, enum PacketType &gt;
</pre>
to:
<pre>
Callback&lt;bool,Ptr&lt;NetDevice&gt;,Ptr&lt;const Packet&gt;,uint16_t,const Address &amp;&gt;
Callback&lt;bool,Ptr&lt;NetDevice&gt;, Ptr&lt;const Packet&gt;, uint16_t,
         const Address &amp;, const Address &amp;, enum PacketType &gt;
</pre>
to avoid the kind of bugs reported in 
<a href="http://www.nsnam.org/bugzilla/show_bug.cgi?id=273">bug 273</a>.
Users who implement a subclass of the NetDevice base class need to change the signature
of their SetReceiveCallback and SetPromiscReceiveCallback methods.
</li>
</ul>


<li>04-08-2008; changeset 
<a href="http://code.nsnam.org/ns-3-dev/rev/cba7b2b80fe8">cba7b2b80fe8</a></li>
<ul>
<li>
Cleanup of MTU confusion and initialization in CsmaNetDevice<br>
The MTU of the CsmaNetDevice defaulted to 65535.  This did not correspond with
the expected MTU found in Ethernet-like devices.  Also there was not clear 
documentation regarding which MTU was being set.  There are two MTU here, one
at the MAC level and one at the PHY level.  We split out the MTU setting to make
this more clear and set the default PHY level MTU to 1500 to be more like
Ethernet.  The encapsulation mode defaults to LLC/SNAP which then puts the
MAC level MTU at 1492 by default.  We allow users to now set the encapsulation
mode, MAC MTU and PHY MTU while keeping the three values consistent.  See the
Doxygen of CsmaNetDevice::SetMaxPayloadLength for a detailed description of the
issues and solution.
</li>
</ul>

<li>21-07-2008; changeset 
<a href="
http://code.nsnam.org/ns-3-dev/rev/99698bc858e8">99698bc858e8</a></li>
<ul>
<li> class NetDevice has added a pure virtual method that
must be implemented by all subclasses:
<pre>
virtual void SetPromiscReceiveCallback (PromiscReceiveCallback cb) = 0;
</pre>
All NetDevices must support this method, and must call this callback
when processing packets in the receive direction (the appropriate place
to call this is device-dependent).  An approach to stub this out
temporarily, if you do not care about immediately enabling this
functionality, would be to add this to your device:
<pre>
void
ExampleNetDevice::SetPromiscReceiveCallback
(NetDevice::PromiscReceiveCallback cb)
{ 
  NS_ASSERT_MSG (false, "No implementation yet for
SetPromiscReceiveCallback");
}
</pre>
To implement this properly, consult the CsmaNetDevice for examples of
when the m_promiscRxCallback is called.
</li>
</ul>

<li>03-07-2008; changeset 
<a href="http://code.nsnam.org/ns-3-dev/rev/d5f8e5fae1c6">d5f8e5fae1c6</a></li>
<ul>
<li>
Miscellaneous cleanup of Udp Helper API, to fix bug 234
<pre>
class UdpEchoServerHelper
{
public:
- UdpEchoServerHelper ();
- void SetPort (uint16_t port); 
+ UdpEchoServerHelper (uint16_t port);
+ 
+ void SetAttribute (std::string name, const AttributeValue &amp;value);
ApplicationContainer Install (NodeContainer c);

class UdpEchoClientHelper
{
public:
- UdpEchoClientHelper ();
+ UdpEchoClientHelper (Ipv4Address ip, uint16_t port);
- void SetRemote (Ipv4Address ip, uint16_t port);
- void SetAppAttribute (std::string name, const AttributeValue &amp;value);
+ void SetAttribute (std::string name, const AttributeValue &amp;value);
ApplicationContainer Install (NodeContainer c);
</pre>
</li>
</ul>

<li>03-07-2008; changeset 
<a href="
http://code.nsnam.org/ns-3-dev/rev/3cdd9d60f7c7">3cdd9d60f7c7</a></li>
<ul>
<li>
Rename all instances method names using "Set..Parameter" to "Set..Attribute"
(bug 232)
</li>
<li> How to fix your code:  Any use of helper API that was using a method
"Set...Parameter()" should be changed to read "Set...Attribute()".  e.g.
<pre>
- csma.SetChannelParameter ("DataRate", DataRateValue (5000000));
- csma.SetChannelParameter ("Delay", TimeValue (MilliSeconds (2)));
+ csma.SetChannelAttribute ("DataRate", DataRateValue (5000000));
+ csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2)));
</pre>
</li>
</ul>
</li>

</ul>
<h2>Changed behavior:</h2>
<ul>

<li>07-09-2008; changeset 
<a href="http://code.nsnam.org/ns-3-dev/rev/5d836ab1523b">5d836ab1523b</a></li>
<ul>

<li>
Implement a finite receive buffer for TCP<br>
The native TCP model in TcpSocketImpl did not support a finite receive buffer.
This changeset adds the following functionality in this regard:
<ul>
<li>
Being able to set the receiver buffer size through the attributes system.
</li>
<li>
This receiver buffer size is now correctly exported in the TCP header as the
advertised window.  Prior to this changeset, the TCP header advertised window
was set to the maximum size of 2^16 bytes.
window
</li>
<li>
The aforementioned window size is correctly used for flow control, i.e. the
sending TCP will not send more data than available space in the receiver's
buffer.
</li>
<li>
In the case of a receiver window collapse, when a advertised zero-window
packet is received, the sender enters the persist probing state in which
it sends probe packets with one payload byte at exponentially backed-off
intervals up to 60s.  The reciever will continue to send advertised 
zero-window ACKs of the old data so long as the receiver buffer remains full.
When the receiver window clears up due to an application read, the TCP
will finally ACK the probe byte, and update its advertised window appropriately.
</li>
</ul>
See 
<a href="http://www.nsnam.org/bugzilla/show_bug.cgi?id=239"> bug 239 </a> for
more.
</li>
</ul>

<li>07-09-2008; changeset 
<a href="http://code.nsnam.org/ns-3-dev/rev/7afa66c2b291">7afa66c2b291</a></li>
<ul>
<li>
Add correct FIN exchange behavior during TCP closedown<br>
The behavior of the native TcpSocketImpl TCP model was such that the final
FIN exchange was not correct, i.e. calling Socket::Close didn't send a FIN
packet, and even if it had, the ACK never came back, and even if it had, the
ACK would have incorrect sequence number.  All these various problems have been
addressed by this changeset.  See 
<a href="http://www.nsnam.org/bugzilla/show_bug.cgi?id=242"> bug 242 </a> for
more.
</li>
</ul>

<li> 28-07-2008; changeset 
<a href="http://code.nsnam.org/ns-3-dev/rev/6f68f1044df1">6f68f1044df1</a>
<ul>
<li>
OLSR: HELLO messages hold time changed to 3*hello
interval from hello interval.  This is an important bug fix as
hold time == refresh time was never intentional, as it leads to
instability in neighbor detection.
</ul>
</li>

</ul>

</body>
</html>