-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGES.html
1870 lines (1654 loc) · 79.4 KB
/
CHANGES.html
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
<!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.15 to ns-3.16</h1>
<h2>New API:</h2>
<ul>
<li>In the Socket class, the following functions were added:
<ul>
<li>(Set/Get)IpTos - sets IP Type of Service field in the IP headers.</li>
<li>(Set/Is)IpRecvTos - tells the socket to pass information about IP ToS up the stack (by adding SocketIpTosTag to the packet).</li>
<li>(Set/Get)IpTtl - sets IP Time to live field in the IP headers.</li>
<li>(Set/Is)RecvIpTtl - tells the socket to pass information about IP TTL up the stack (by adding SocketIpTtlTag to the packet).</li>
<li>(Set/Is)Ipv6Tclass - sets Traffic Class field in the IPv6 headers.</li>
<li>(Set/Is)Ipv6RecvTclass - tells the socket to pass information about IPv6 TCLASS up the stack (by adding SocketIpv6TclassTag to the packet).</li>
<li>(Set/Get)Ipv6HopLimit - sets Hop Limit field in the IPv6 headers.</li>
<li>(Set/Is)Ipv6RecvHopLimit - tells the socket to pass information about IPv6 HOPLIMIT up the stack (by adding SocketIpv6HoplimitTag to the packet).</li>
</ul>
A user can call these functions to set/get the corresponding socket option. See examples/socket/socket-options-ipv4.cc and examples/socket/socket-options-ipv6.cc for examples.
</ul>
<h2>Changes to existing API:</h2>
<ul>
<li>In the MobilityHelper class, the functions EnableAscii () and EnableAsciiAll () were changed to use output stream wrappers rather than standard C++ ostreams. The purpose of this change was to make them behave analogously to other helpers in ns-3 that generate ascii traces. Now, the file stream that is open in MobilityHelper is closed nicely upon asserts and program exits.</li>
</ul>
<h2>Changes to build system:</h2>
<ul>
<li>It's now possible to use distcc when building ns-3. See tutorial for details.</li>
</ul>
<h2>Changed behavior:</h2>
<ul>
<li>Sending a packet through Ipv4RawSocket now supports checksum in the Ipv4Header. It is still not possible to manually put in arbitrary checksum as the checksum is automatically calculated at Ipv4L3Protocol. The user has to enable checksum globally for this to work. Simply calling Ipv4Header::EnableChecksum() for a single Ipv4Header will not work.</li>
<li>Now MultiModelSpectrumChannel allows a SpectrumPhy instance to change SpectrumModel at runtime by issuing a call to MultiModelSpectrumChannel::AddRx (). Previously, MultiModelSpectrumChannel required each SpectrumPhy instance to stick with the same SpectrumModel for the whole simulation.
</li>
</ul>
<hr>
<h1>Changes from ns-3.14 to ns-3.15</h1>
<h2>New API:</h2>
<ul>
<li>A RandomVariableStreamHelper has been introduced to assist with
using the Config subsystem path names to assign fixed stream numbers
to RandomVariableStream objects.</li>
</ul>
<h2>Changes to existing API:</h2>
<ul>
<li>Derived classes of RandomVariable (i.e. the random variable
implementations) have been ported to a new RandomVariableStream base class.
<li>For a given distribution DistributionVariable (such as UniformVariable),
the new class name is DistributionRandomVariable (such as
UniformRandomVariable). </li>
<li>The new implementations are also derived from class ns3::Object and
are handled using the ns-3 smart pointer (Ptr) class. </li>
<li>The new variable classes also have a new attributed called "Stream"
which allows them to be assigned to a fix stream index when assigned
to the underlying pseudo-random stream of numbers.</li>
</li>
</ul>
<h2>Changes to build system:</h2>
<ul>
<li></li>
</ul>
<h2>Changed behavior:</h2>
<ul>
<li>Programs using random variables or models that include random variables
may exhibit changed output for a given run number or seed, due to a possible
change in the order in which random variables are assigned to underlying
pseudo-random sequences. Consult the manual for more information regarding
this.</li>
</ul>
<hr>
<h1>Changes from ns-3.13 to ns-3.14</h1>
<h2>New API:</h2>
<ul>
<li>The new class AntennaModel provides an API for modeling the radiation pattern of antennas.
</li>
<li>The new buildings module introduces an API (classes, helpers, etc)
to model the presence of buildings in a wireless network topology.
</li>
<li>The LENA project's implementation of the LTE Mac Scheduler Interface Specification
standardized by the Small Cell Forum (formerly Femto Forum) is now available for
use with the LTE module.
</li>
</ul>
<h2>Changes to existing API:</h2>
<ul>
<li> The Ipv6RawSocketImpl "IcmpFilter" attribute has been removed. Six
new member functions have been added to enable the same functionality.
</li>
<li> IPv6 support for TCP and UDP has been implemented. Socket functions
that take an address [e.g. Send (), Connect (), Bind ()] can accept an
ns3::Ipv6Address or a ns3::Address in addition to taking an ns3::Ipv4Address.
(Note that the ns3::Address must contain a ns3::Ipv6Address or a ns3::Ipv4Address,
otherwise these functions will return an error).
Internally, the socket now stores the remote address as a type "ns3::Address"
instead of a type "ns3::Ipv4Address". The IPv6 Routing Header extension is not
currently supported in ns3 and will not be reflected in the TCP and UDP checksum
calculations per RFC 2460. Also note that UDP checksums for IPv6 packets are
required per RFC, but remain optional and disabled by default in ns3 (in the
interest of performance).
</li>
<li>
When calling Bind () on a socket without an address, the behavior remains the
same: it will bind to the IPv4 "any" address (0.0.0.0). In order to Bind () to
the IPv6 "any" address in a similar fashion, use "Bind6 ()".
</li>
<li>
The prototype for the RxCallback function in the Ipv6EndPoint was changed.
It now includes the destination IPv6 address of the end point which was
needed for TCP. This lead to a small change in the UDP and ICMPv6 L4
protocols as well.
</li>
<li>
Ipv6RoutingHelper can now print the IPv6 Routing Tables at specific
intervals or time. Exactly like Ipv4RoutingHelper do.
</li>
<li>
New "SendIcmpv6Redirect" attribute (and getter/setter functions) to
Ipv6L3Protocol. The behavior is similar to Linux's conf "send_redirects",
i.e., enable/disable the ICMPv6 Redirect sending.
</li>
<li> The SpectrumPhy abstract class now has a new method
<pre>virtual Ptr<AntennaModel> GetRxAntenna () = 0;</pre>
that all derived classes need to implement in order to integrate properly with the newly added antenna model. In addition, a new member variable "Ptr<AntennaModel> txAntenna" has been added to SpectrumSignalParameters in order to allow derived SpectrumPhy classes to provide information about the antenna model used for the transmission of a waveform.
</li>
<li> The Ns2CalendarScheduler event scheduler has been removed.
</li>
<li>
ErrorUnit enum has been moved into RateErrorModel class, and symbols EU_BIT, EU_BYTE and EU_PKT have been renamed to RateErrorModel::ERROR_UNIT_BIT, RateErrorModel::ERROR_UNIT_BYTE and RateErrorModel::ERROR_UNIT_PACKET. RateErrorModel class attribute "ErrorUnit" values have also been renamed for consistency, and are now "ERROR_UNIT_BIT", "ERROR_UNIT_BYTE", "ERROR_UNIT_PACKET".
</li>
<li>
QueueMode enum from DropTailQueue and RedQueue classes has been unified and moved to Queueu class. Symbols DropTailQueue::PACKETS and DropTailQueue::BYTES are now named Queue::QUEUE_MODE_PACKETS and DropTailQueue::QUEUE_MODE_BYTES. In addition, DropTailQueue and RedQueue class attributes "Mode" have been renamed for consistency from "Packets" and "Bytes" to "QUEUE_MODE_PACKETS" and "QUEUE_MODE_BYTES".
</li>
<li>
The API of the LTE module has undergone a significant redesign with
the merge of the code from the LENA project. The new API is not
backwards compatible with the previous version of the LTE module.
</li>
<li> The Ipv6AddressHelper API has been aligned with the Ipv4AddressHelper API.
The helper can be set with a call to Ipv6AddressHelper::SetBase
(Ipv6Address network, Ipv6Prefix prefix) instead of NewNetwork
(Ipv6Address network, Ipv6Prefix prefix). A new NewAddress (void) method
has been added. Typical usage will involve calls to SetBase (), NewNetwork (),
and NewAddress (), as in class Ipv4AddressHelper.
</li>
</ul>
<h2>Changes to build system:</h2>
<ul>
<li> The following files are removed:
<pre>
src/internet/model/ipv4-l4-protocol.cc
src/internet/model/ipv4-l4-protocol.h
src/internet/model/ipv6-l4-protocol.cc
src/internet/model/ipv6-l4-protocol.h
</pre>
and replaced with:
<pre>
src/internet/model/ip-l4-protocol.cc
src/internet/model/ip-l4-protocol.h
</pre>
</li>
</ul>
<h2>Changed behavior:</h2>
<ul>
<li> Dual-stacked IPv6 sockets are implemented. An IPv6 socket can accept
an IPv4 connection, returning the senders address as an IPv4-mapped address
(IPV6_V6ONLY socket option is not implemented).
</li>
<li>
The following examples/application/helpers were modified to support IPv6:
<pre>
csma-layout/examples/csma-star [*]
netanim/examples/star-animation [*]
point-to-point-layout/model/point-to-point-star.cc
point-to-point-layout/model/point-to-point-grid.cc
point-to-point-layout/model/point-to-point-dumbbell.cc
examples/udp/udp-echo [*]
examples/udp-client-server/udp-client-server [*]
examples/udp-client-server/udp-trace-client-server [*]
applications/helper/udp-echo-helper
applications/model/udp-client
applications/model/udp-echo-client
applications/model/udp-echo-server
applications/model/udp-server
applications/model/udp-trace-client
[*] Added '--useIpv6' flag to switch between IPv4 and IPv6
</pre>
</li>
</ul>
<hr>
<h1>Changes from ns-3.12 to ns-3.13</h1>
<h2>Changes to build system:</h2>
<ul>
<li> The underlying version of waf used by ns-3 was upgraded to 1.6.7.
This has a few changes for users and developers:
<ul>
<li> by default, "build" no longer has a subdirectory debug or optimized.
To get different build directories for different build types, you can use
the waf configure -o <argument> option, e.g.:
<pre>
./waf configure -o shared
./waf configure --enable-static -o static
</pre>
</li>
<li> (for developers) the ns3headers taskgen needs to be created with a
features parameter name:
<pre>
- headers = bld.new_task_gen('ns3header')
+ headers = bld.new_task_gen(features=['ns3header'])
</pre>
<li> no longer need to edit src/wscript to add a module, just create your
module directory inside src and ns-3 will pick it up
<li> In WAF 1.6, adding -Dxxx options is done via the DEFINES env. var.
instead of CXXDEFINES
<li> waf env values are always lists now, e.g. env['PYTHON'] returns
['/usr/bin/python'], so you may need to add [0] to the value in some places
</ul>
</ul>
<h2>New API:</h2>
<ul>
<li> In the mobility module, there is a new MobilityModel::GetRelativeSpeed() method returning the relative speed of two objects. </li>
<li> A new Ipv6AddressGenerator class was added to generate sequential
addresses from a provided base prefix and interfaceId. It also will detect
duplicate address assigments. </li>
</ul>
<h2>Changes to existing API:</h2>
<ul>
<li> In the spectrum module, the parameters to SpectrumChannel::StartTx () and SpectrumPhy::StartRx () methods are now passed using the new struct SpectrumSignalParameters. This new struct supports inheritance, hence it allows technology-specific PHY implementations to provide technology-specific parameters in SpectrumChannel::StartTx() and SpectrumPhy::StartRx(), while at the same time keeping a set of technology-independent parameters common across all spectrum-enabled PHY implementations (i.e., the duration and the power spectral density which are needed for interference calculation). Additionally, the SpectrumType class has been removed, since now the type of a spectrum signal can be inferred by doing a dynamic cast on SpectrumSignalParameters. See the <A href="http://mailman.isi.edu/pipermail/ns-developers/2011-October/009495.html" >Spectrum API change discussion on ns-developers</A> for the motivation behind this API change.
</li>
<li> The WifiPhyStandard enumerators for specifying half- and quarter-channel
width standards has had a change in capitalization:
<ul>
<li> WIFI_PHY_STANDARD_80211_10Mhz was changed to WIFI_PHY_STANDARD_80211_10MHZ
<li> WIFI_PHY_STANDARD_80211_5Mhz was changed to WIFI_PHY_STANDARD_80211_5MHZ
</ul>
<li> In the SpectrumPhy base class, the methods to get/set the
MobilityModel and the NetDevice were previously working with
opaque Ptr<Object>. Now all these methods have been
changed so that they work with Ptr<NetDevice>
and Ptr<MobilityModel> as appropriate. See <A href="https://www.nsnam.org/bugzilla/show_bug.cgi?id=1271">Bug 1271</A> on
bugzilla for the motivation.
</li>
</ul>
<h2>Changed behavior:</h2>
<ul>
<li> TCP bug fixes
<ul>
<li> Connection retries count is a separate variable with the retries limit, so cloned sockets can reset the count
<li> Fix bug on RTO that may halt the data flow
<li> Make TCP endpoints always holds the accurate address:port info
<li> RST packet is sent on closed sockets
<li> Fix congestion window sizing problem upon partial ACK in TcpNewReno
<li> Acknowledgement is sent, rather than staying silent, upon arrival of unacceptable packets
<li> Advance TcpSocketBase::m_nextTxSequence after RTO
</ul>
<li> TCP enhancements
<ul>
<li> Latest RTT value now stored in variable TcpSocketBase::m_lastRtt
<li> The list variable TcpL4Protocol::m_sockets now always holds all the created, running TcpSocketBase objects
<li> Maximum announced window size now an attribute, ns3::TcpSocketBase::MaxWindowSize
<li> TcpHeader now recognizes ECE and CWR flags (c.f. RFC3168)
<li> Added TCP option handling call in TcpSocketBase for future extension
<li> Data out of range (i.e. outsize acceptable range of receive window) now computed on bytes, not packets
<li> TCP moves from time-wait state to closed state after twice the time specified by attribute ns3:TcpSocketBase::MaxSegLifeTime
<li> TcpNewReno supports limited transmit (RFC3042) if asserting boolean attribute ns3::TcpNewReno::LimitedTransmit
<li> Nagle's algorithm supported. Default off, turn on by calling TcpSocket::SetTcpNoDelay(true)
</ul>
</ul>
<hr>
<h1>Changes from ns-3.11 to ns-3.12</h1>
<h2>Changes to build system:</h2>
<ul>
</ul>
<h2>New API:</h2>
<ul>
<li> New method, RegularWifiMac::SetPromisc (void), to set the interface
to promiscuous mode.
</ul>
<h2>Changes to existing API:</h2>
<ul>
<li> The spelling of the attribute 'IntialCellVoltage' from LiIonEnergySource
was corrected to 'InitialCellVoltage'; this will affect existing users who
were using the attribute with the misspelling.
<li> Two trace sources in class WifiPhy have had their names changed:
<ul>
<li> 'PromiscSnifferRx' is now 'MonitorSnifferRx'
<li> 'PromiscSnifferTx' is now 'MonitorSnifferTx'
</ul>
</ul>
<h2>Changed behavior:</h2>
<ul>
<li> IPv4 fragmentation is now supported.
</ul>
<hr>
<h1>Changes from ns-3.10 to ns-3.11</h1>
<h2>Changes to build system:</h2>
<ul>
<li><b>Examples and tests are no longer built by default in ns-3</b>
<p>
You can now make examples and tests be built in ns-3 in two ways.
<ol>
<li> Using build.py when ns-3 is built for the first time:
<pre>
./build.py --enable-examples --enable-tests
</pre>
<li> Using waf once ns-3 has been built:
<pre>
./waf configure --enable-examples --enable-tests
</pre>
</ol>
</p></li>
<li><b> Subsets of modules can be enabled using the ns-3 configuration file</b>
<p>A new configuration file, .ns3rc, has been added to ns-3 that
specifies the modules that should be enabled during the ns-3 build.
See the documentation for details.
</p></li>
</ul>
<h2>New API:</h2>
<ul>
<li><b>int64x64_t</b>
<p>The <b>int64x64_t</b> type implements all the C++ arithmetic operators to behave like one of the
C++ native types. It is a 64.64 integer type which means that it is a 128bit integer type with
64 bits of fractional precision. The existing <b>Time</b> type is now automatically convertible to
<b>int64x64_t</b> to allow arbitrarily complex arithmetic operations on the content of <b>Time</b>
objects. The implementation of <b>int64x64_t</b> is based on the previously-existing
<b>HighPrecision</b> type and supercedes it.
</p></li>
</ul>
<h2>Changes to existing API:</h2>
<ul>
<li><b>Wifi TX duration calculation moved from InterferenceHelper to WifiPhy</b>
<p>The following static methods have been moved from the InterferenceHelper class to the WifiPhy class:
<pre>
static Time CalculateTxDuration (uint32_t size, WifiMode payloadMode, enum WifiPreamble preamble);
static WifiMode GetPlcpHeaderMode (WifiMode payloadMode, WifiPreamble preamble);
static uint32_t GetPlcpHeaderDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble);
static uint32_t GetPlcpPreambleDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble);
static uint32_t GetPayloadDurationMicroSeconds (uint32_t size, WifiMode payloadMode);
</pre>
</p></li>
<li><b>Test cases no longer return a boolean value</b>
<p>Unit test case DoRun() functions no longer return a bool value. Now, they don't return a value at all. The motivation for this change was to disallow users from merely returning "true" from a test case to force an error to be recorded. Instead, test case macros should be used.
</p></li>
<li><b>PhyMac renamed to GenericPhy</b>
<p>The PhyMac interface previously defined in phy-mac.h has been
renamed to GenericPhy interface and moved to a new file
generic-phy.h. The related variables and methods have been renamed accordingly.
</p></li>
<li><b>Scalar</b>
<p>The Scalar type has been removed. Typical code such as:
<pre>
Time tmp = ...;
Time result = tmp * Scalar (5);
</pre>
Can now be rewritten as:
<pre>
Time tmp = ...;
Time result = Time (tmp * 5);
</pre>
</p>
</li>
<li><b>Multicast GetOutputTtl() commands</b>
<p> As part of bug 1047 rework to enable multicast routes on nodes with
more than 16 interfaces, the methods Ipv4MulticastRoute::GetOutputTtl ()
and Ipv6MulticastRoute::GetOutputTtl () have been modified to return
a std::map of interface IDs and TTLs for the route.
</p>
</li>
</ul>
<h2>Changed behavior:</h2>
<ul>
</ul>
<hr>
<h1>Changes from ns-3.9 to ns-3.10</h1>
<h2>Changes to build system:</h2>
<ul>
<li><b>Regression tests are no longer run using waf</b>
<p>All regression testing is now being done in test.py. As a result, a
separate reference trace repository is no longer needed to perform
regression tests. Tests that require comparison against known good traces
can still be run from test.py. The --regression option for waf has been
removed. However, the "-r" option to download.py has been kept to
allow users to fetch older revisions of ns-3 that contain these traces.
</p>
<li><b>Documentation converted to Sphinx</b>
<p> Project documentation (manual, tutorial, and testing) have been
converted to Sphinx from the GNU Texinfo markup format.</p>
</ul>
<h2>New API:</h2>
<ul>
<li><b>Pyviz visualizer</b>
<p>A Python-based visualizer called pyviz is now integrated with ns-3.
For Python simulations, there is an API to start the visualizer. You
have to import the visualizer module, and call visualizer.start()
instead of ns3.Simulator.Run(). For C++ simulations, there is no API.
For C++ simulations (but also works for Python ones) you need to set
the GlobalValue SimulatorImplementationType to
"ns3::VisualSimulatorImpl". This can be set from the command-line,
for example (add the
<tt>--SimulatorImplementationType=ns3::VisualSimulatorImpl</tt>
option), or via the waf option <tt>--visualizer</tt>, in addition to
the usual <tt>--run</tt> option to run programs.
</p></li>
<li><b>WaypointMobility attributes</b>
<p>Two attributes were added to WaypointMobility model: LazyNotify and
InitialPositionIs Waypoint. See RELEASE_NOTES for details. </p> </li>
<li><b>802.11g rates for ERP-OFDM added</b>
<p>New WifiModes of the form ErpOfdmRatexxMbps, where xx is the rate
in Mbps (6, 9, 12, 18, 24, 36, 48, 54), are available for 802.11g.
More details are in the RELEASE_NOTES. </p> </li>
<li><b>Socket::GetSocketType ()</b>
<p>This is analogous to getsockopt(SO_TYPE). ipv4-raw-socket, ipv6-raw-socket,
and packet-socket return NS3_SOCK_RAW. tcp-socket and nsc-tcp-socket return
NS3_SOCK_STREAM. udp-socket returns NS3_SOCK_DGRAM.</p></li>
<li><b>BulkSendApplication</b>
<p>Sends data as fast as possible up to MaxBytes or unlimited if MaxBytes is
zero. Think OnOff, but without the "off" and without the variable data rate.
This application only works with NS3_SOCK_STREAM and NS3_SOCK_SEQPACKET sockets,
for example TCP sockets and not UDP sockets. A helper class exists to
facilitate creating BulkSendApplications. The API for the helper class
is similar to existing application helper classes, for example, OnOff.
</p></li>
<li><b>Rakhmatov Vrudhula non-linear battery model</b>
<p>New class and helper for this battery model. </p></li>
<li><b>Print IPv4 routing tables</b>
<p>New class methods and helpers for printing IPv4 routing tables
to an output stream. </p></li>
<li><b>Destination-Sequenced Distance Vector (DSDV) routing protocol</b>
<p>Derives from Ipv4RoutingProtocol and contains a DsdvHelper class. </p></li>
<li><b>3GPP Long Term Evolution (LTE) models</b>
<p>More details are in the RELEASE_NOTES. </p></li>
</ul>
<h2>Changes to existing API:</h2>
<ul>
<li><b>Consolidation of Wi-Fi MAC high functionality</b>
<p>Wi-Fi MAC high classes have been reorganised in attempt to
consolidate shared functionality into a single class. This new class
is RegularWifiMac, and it derives from the abstract WifiMac, and is
parent of AdhocWifiMac, StaWifiMac, ApWifiMac, and
MeshWifiInterfaceMac. The QoS and non-QoS class variants are no
longer, with a RegularWifiMac attribute "QosSupported" allowing
selection between these two modes of operation. QosWifiMacHelper and
NqosWifiMacHelper continue to work as previously, with a
behind-the-scenes manipulation of the 'afore-mentioned attribute.
</p></li>
<li><b>New TCP architecture</b>
<p>TcpSocketImpl was replaced by a new base class TcpSocketBase and
several subclasses implementing different congestion control. From
a user-level API perspective, the main change is that a new attribute
"SocketType" is available in TcpL4Protocol, to which a TypeIdValue
of a specific Tcp variant can be passed. In the same class, the attribute
"RttEstimatorFactory" was also renamed "RttEstimatorType" since it now
takes a TypeIdValue instead of an ObjectFactoryValue. In most cases,
however, no change to existing user programs should be needed.
</p></li>
</ul>
<h2>Changed behavior:</h2>
<ul>
<li><b>EmuNetDevice uses DIX instead of LLC encapsulation by default</b>
<p>bug 984 in ns-3 tracker: real devices don't usually understand LLC/SNAP
so the default of DIX makes more sense.
</p></li>
<li><b>TCP defaults to NewReno congestion control</b>
<p>As part of the TCP socket refactoring, a new TCP implementation provides
slightly different behavior than the previous TcpSocketImpl that provided
only fast retransmit. The default behavior now is NewReno which provides
fast retransmit and fast recovery with window inflation during recovery.
</p></li>
</ul>
<hr>
<h1>Changes from ns-3.8 to ns-3.9</h1>
<h2>Changes to build system:</h2>
<h2>New API:</h2>
<ul>
<li><b>Wifi set block ack threshold:</b> Two methods for setting block ack
parameters for a specific access class:
<pre>
void QosWifiMacHelper::SetBlockAckThresholdForAc (enum AccessClass accessClass, uint8_t threshold);
void QosWifiMacHelper::SetBlockAckInactivityTimeoutForAc (enum AccessClass accessClass, uint16_t timeout);
</pre>
</li>
<li><b>Receive List Error Model:</b> Another basic error model that allows
the user to specify a list of received packets that should be errored. The
list corresponds not to the packet UID but to the sequence of received
packets as observed by the error model. See src/common/error-model.h
</li>
<li><b>Respond to interface events:</b> New attribute for Ipv4GlobalRouting,
"RespondToInterfaceEvents", which when enabled, will cause global routes
to be recomputed upon any interface or address notification event from IPv4.
</li>
<li><b>Generic sequence number:</b> New generic sequence number class to
easily handle comparison, subtraction, etc. for sequence numbers.
To use it you need to supply two fundamental types as template parameters:
NUMERIC_TYPE and SIGNED_TYPE. For instance, <tt>SequenceNumber<uint32_t, int32_t></tt>
gives you a 32-bit sequence number, while <tt>SequenceNumber<uint16_t, int16_t></tt>
is a 16-bit one. For your convenience, these are typedef'ed as
<tt>SequenceNumber32</tt> and <tt>SequenceNumber16</tt>, respectively.
</li>
<li><b>Broadcast socket option:</b> New Socket
methods <tt>SetAllowBroadcast</tt> and <tt>GetAllowBroadcast</tt> add
to NS-3 <tt>Socket</tt>'s the equivalent to the POSIX SO_BROADCAST
socket option (setsockopt/getsockopt). Starting from this NS-3
version, IPv4 sockets do not allow us to send packets to broadcast
destinations by default; SetAllowBroadcast must be called beforehand
if we wish to send broadcast packets.
</li>
<li><b>Deliver of packet ancillary information to sockets:</b> A method to deliver ancillary information
to the socket interface (fixed in bug 671): <pre>void Socket::SetRecvPktInfo (bool flag);</pre>
</ul>
<h2>Changes to existing API:</h2>
<ul>
<li><b>Changes to construction and naming of Wi-Fi transmit rates:</b>
A reorganisation of the construction of Wi-Fi transmit rates has been
undertaken with the aim of simplifying the task of supporting further
IEEE 802.11 PHYs. This work has been completed under the auspices of
Bug 871.
From the viewpoint of simulation scripts not part of the ns-3
distribution, the key change is that WifiMode names of the form
wifi<em>x</em>-<em>n</em>mbs are now invalid. Names now take the
form <em>Cccc</em>Rate<em>n</em>Mbps[BW<em>b</em>MHz],
where <em>n</em> is the root bitrate in megabits-per-second as before
(with only significant figures included, and an underscore replacing
any decimal point), and <em>Cccc</em> is a representation of the
Modulation Class as defined in Table 9-2 of IEEE
Std. 802.11-2007. Currently-supported options for <em>Cccc</em>
are <em>Ofdm</em> and <em>Dsss</em>. For modulation classes where
optional reduced-bandwidth transmission is possible, this is captured
in the final part of the form above, with <em>b</em> specifying the
nominal signal bandwidth in megahertz. </li>
<li><b>Consolidation of classes support Wi-Fi Information Elements:</b>
When the <em>mesh</em> module was introduced it added a class
hierarchy for modelling of the various Information Elements that were
required. In this release, this class hierarchy has extended by moving
the base classes (WifiInformationElement and
WifiInformationElementVector) into the <em>wifi</em> module. This
change is intended to ease the addition of support for modelling of
further Wi-Fi functionality. </li>
<li><b>Changed for {Ipv4,Ipv6}PacketInfoTag delivery:</b> In order to
deliver ancillary information to the socket interface (fixed in bug 671),
<em>Ipv4PacketInfoTag</em> and <em>Ipv6PacketInfoTag</em> are implemented.
For the delivery of this information, the following changes are made into
existing class.
In Ipv4EndPoint class,
<pre>
- void SetRxCallback (Callback<void,Ptr<Packet>, Ipv4Address, Ipv4Address, uint16_t> callback);
+ void SetRxCallback (Callback<void,Ptr<Packet>, Ipv4Header, uint16_t, Ptr<Ipv4Interface> > callback);
- void ForwardUp (Ptr<Packet> p, Ipv4Address saddr, Ipv4Address daddr, uint16_t sport);
+ void ForwardUp (Ptr<Packet> p, const Ipv4Header& header, uint16_t sport,
+ Ptr<Ipv4Interface> incomingInterface);
</pre>
In Ipv4L4Protocol class,
<pre>
virtual enum RxStatus Receive(Ptr<Packet> p,
- Ipv4Address const &source,
- Ipv4Address const &destination,
+ Ipv4Header const &header,
Ptr<Ipv4Interface> incomingInterface) = 0;
</pre>
<pre>
-Ipv4RawSocketImpl::ForwardUp (Ptr<const Packet> p, Ipv4Header ipHeader, Ptr<NetDevice> device)
+Ipv4RawSocketImpl::ForwardUp (Ptr<const Packet> p, Ipv4Header ipHeader, Ptr<Ipv4Interface> incomingInterface)
-NscTcpSocketImpl::ForwardUp (Ptr<Packet> packet, Ipv4Address saddr, Ipv4Address daddr, uint16_t port)
+NscTcpSocketImpl::ForwardUp (Ptr<Packet> packet, Ipv4Header header, uint16_t port,
+ Ptr<Ipv4Interface> incomingInterface)
-TcpSocketImpl::ForwardUp (Ptr<Packet> packet, Ipv4Address saddr, Ipv4Address daddr, uint16_t port)
+TcpSocketImpl::ForwardUp (Ptr<Packet> packet, Ipv4Header header, uint16_t port,
+ Ptr<Ipv4Interface> incomingInterface)
-UdpSocketImpl::ForwardUp (Ptr<Packet> packet, Ipv4Address saddr, Ipv4Address daddr, uint16_t port)
+UdpSocketImpl::ForwardUp (Ptr<Packet> packet, Ipv4Header header, uint16_t port,
+ Ptr<Ipv4Interface> incomingInterface)
</pre>
</li>
<li>The method OutputStreamWrapper::SetStream (std::ostream *ostream) was removed.</li>
)
</ul>
<h2>Changed behavior:</h2>
<ul>
<li><b>Queue trace behavior during Enqueue changed:</b> The behavior of the
Enqueue trace source has been changed to be more intuitive and to agree with
documentation. Enqueue and Drop events in src/node/queue.cc are now mutually
exclusive. In the past, the meaning of an Enqueue event was that the Queue
Enqueue operation was being attempted; and this could be followed by a Drop
event if the Queue was full. The new behavior is such that a packet is either
Enqueue'd successfully or Drop'ped.
<li><b>Drop trace logged for Ipv4/6 forwarding failure:</b> Fixed bug 861; this
will add ascii traces (drops) in Ipv4 and Ipv6 traces for forwarding failures
<li><b>Changed default WiFi error rate model for OFDM modulation types:</b>
Adopted more conservative ErrorRateModel for OFDM modulation types (a/g).
This will require 4 to 5 more dB of received power to get similar results
as before, so users may observe a reduced WiFi range when using the defaults.
See tracker issue 944 for more details.
</ul>
<hr>
<h1>Changes from ns-3.7 to ns-3.8</h1>
<h2>Changes to build system:</h2>
<h2>New API:</h2>
<ul>
<li><b>Matrix propagation loss model:</b> This radio propagation model uses a two-dimensional matrix
of path loss indexed by source and destination nodes.
<li><b>WiMAX net device</b>: The developed WiMAX model attempts to provide an accurate MAC and
PHY level implementation of the 802.16 specification with the Point-to-Multipoint (PMP) mode and the WirelessMAN-OFDM
PHY layer. By adding WimaxNetDevice objects to ns-3 nodes, one can create models of
802.16-based networks. The source code for the WiMAX models lives in the directory src/devices/wimax.
The model is mainly composed of three layers:
<ul>
<li>The convergence sublayer (CS)
<li>The MAC Common Part Sublayer (MAC-CPS)
<li>The Physical layer
</ul>
The main way that users who write simulation scripts will typically
interact with the Wimax models is through the helper API and through
the publicly visible attributes of the model.
The helper API is defined in src/helper/wimax-helper.{cc,h}.
Three examples containing some code that shows how to setup a 802.16 network are located under examples/wimax/
<li><b>MPI Interface for distributed simulation:</b> Enables access
to necessary MPI information such as MPI rank and size.
<li><b>Point-to-point remote channel:</b> Enables point-to-point
connection between net-devices on different simulators, for use
with distributed simulation.
<li><b>GetSystemId in simulator:</b> For use with distributed
simulation, GetSystemId returns zero by non-distributed
simulators. For the distributed simulator, it returns the
MPI rank.
<li><b>Enhancements to src/core/random-variable.cc/h:</b> New Zeta random variable generator. The Zeta random
distribution is tightly related to the Zipf distribution (already in ns-3.7). See the documentation,
especially because sometimes the Zeta distribution is called Zipf and viceversa. Here we conform to the
Wikipedia naming convention, i.e., Zipf is bounded while Zeta isn't.
<li><b>Two-ray ground propagation loss model:</b> Calculates the crossover distance under which Friis is used. The antenna
height is set to the nodes z coordinate, but can be added to using the model parameter SetHeightAboveZ, which
will affect ALL stations
<li><b>Pareto random variable</b> has two new constructors to specify scale and shape:
<pre>
ParetoVariable (std::pair<double, double> params);
ParetoVariable (std::pair<double, double> params, double b);
</pre>
</ul>
<h2>Changes to existing API:</h2>
<ul>
<li><b>Tracing Helpers</b>: The organization of helpers for both pcap and ascii
tracing, in devices and protocols, has been reworked. Instead of each device
and protocol helper re-implementing trace enable methods, classes have been
developed to implement user-level tracing in a consistent way; and device and
protocol helpers use those classes to provide tracing functionality.<br>
In addition to consistent operation across all helpers, the object name service
has been integrated into the trace file naming scheme.<br>
The internet stack helper has been extensively massaged to make it easier to
manage traces originating from protocols. It used to be the case that there
was essentially no opportunity to filter tracing on interfaces, and resulting
trace file names collided with those created by devices. File names are now
disambiguated and one can enable traces on a protocol/interface basis analogously
to the node/device granularity of device-based helpers.<br>
The primary user-visible results of this change are that trace-related functions
have been changed from static functions to method calls; and a new object has
been developed to hold streams for ascii traces.<br>
New functionality is present for ascii traces. It is now possible to create
multiple ascii trace files automatically just as was possible for pcap trace
files.<br>
The implementation of the helper code has been designed also to provide
functionality to make it easier for sophisticated users to hook traces of
various kinds and write results to (file) streams.
Before:
<pre>
CsmaHelper::EnablePcapAll ();
std::ofstream ascii;
ascii.open ("csma-one-subnet.tr", std::ios_base::binary | std::ios_base::out);
CsmaHelper::EnableAsciiAll (ascii);
InternetStackHelper::EnableAsciiAll (ascii);
</pre>
After:
<pre>
CsmaHelper csmaHelper;
InternetStackHelper stack;
csmaHelper.EnablePcapAll ();
AsciiTraceHelper ascii;
csma.EnableAsciiAll (ascii.CreateFileStream ("csma-one-subnet.tr"));
stack.EnableAsciiIpv4All (stream);
</pre>
<li><b>Serialization and Deserialization</b> in buffer, nix-vector,
packet-metadata, and packet has been modified to use raw character
buffers, rather than the Buffer class
<pre>
+ uint32_t Buffer::GetSerializedSize (void) const;
+ uint32_t Buffer::Serialize (uint8_t* buffer, uint32_t maxSize) const;
+ uint32_t Buffer::Deserialize (uint8_t* buffer, uint32_t size);
- void NixVector::Serialize (Buffer::Iterator i, uint32_t size) const;
+ uint32_t NixVector::Serialize (uint32_t* buffer, uint32_t maxSize) const;
- uint32_t NixVector::Deserialize (Buffer::Iterator i);
+ uint32_t NixVector::Deserialize (uint32_t* buffer, uint32_t size);
- void PacketMetadata::Serialize (Buffer::Iterator i, uint32_t size) const;
+ uint32_t PacketMetadata::Serialize (uint8_t* buffer, uint32_t maxSize) const;
- uint32_t PacketMetadata::Deserialize (Buffer::Iterator i);
+ uint32_t PacketMetadata::Deserialize (uint8_t* buffer, uint32_t size);
+ uint32_t Packet::GetSerializedSize (void) const;
- Buffer Packet::Serialize (void) const;
+ uint32_t Packet::Serialize (uint8_t* buffer, uint32_t maxSize) const;
- void Packet::Deserialize (Buffer buffer);
+ Packet::Packet (uint8_t const*buffer, uint32_t size, bool magic);
</pre>
<li><b>PacketMetadata uid</b> has been changed to a 64-bit value. The
lower 32 bits give the uid, while the upper 32-bits give the MPI rank
for distributed simulations. For non-distributed simulations, the
upper 32 bits are simply zero.
<pre>
- inline PacketMetadata (uint32_t uid, uint32_t size);
+ inline PacketMetadata (uint64_t uid, uint32_t size);
- uint32_t GetUid (void) const;
+ uint64_t GetUid (void) const;
- PacketMetadata::PacketMetadata (uint32_t uid, uint32_t size);
+ PacketMetadata::PacketMetadata (uint64_t uid, uint32_t size);
- uint32_t Packet::GetUid (void) const;
+ uint64_t Packet::GetUid (void) const;
</pre>
<li><b>Moved propagation models</b> from src/devices/wifi to src/common
<li><b>Moved Mtu attribute from base class NetDevice</b> This attribute is
now found in all NetDevice subclasses.
</ul>
<h2>Changed behavior:</h2>
<ul>
</ul>
<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<NetDevice> 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>Ad 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<Ipv4Route> RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr) = 0;
+ virtual Ptr<Ipv4Route> RouteOutput (Ptr<Packet> p, const Ipv4Header &header, Ptr<NetDevice> 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<Ipv6Route> RouteOutput (Ptr<Packet> p, const Ipv6Header &header, uint32_t oif, Socket::SocketErrno &sockerr) = 0;
+ virtual Ptr<Ipv6Route> RouteOutput (Ptr<Packet> p, const Ipv6Header &header, Ptr<NetDevice> 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<Packet> p, uint16_t protocol,
Mac48Address to, Mac48Address from,
Ptr<SimpleNetDevice> sender)
{
for (std::vector<Ptr<SimpleNetDevice> >::const_iterator i = m_devices.begin (); i != m_devices.end (); ++i)
{
Ptr<SimpleNetDevice> tmp = *i;
if (tmp == sender)
{
continue;
}
Simulator::ScheduleNow (&SimpleNetDevice::Receive, tmp, p->Copy (), protocol, to, from);
}
}
</pre>
After:
<pre>
void
SimpleChannel::Send (Ptr<Packet> p, uint16_t protocol,
Mac48Address to, Mac48Address from,
Ptr<SimpleNetDevice> sender)
{
for (std::vector<Ptr<SimpleNetDevice> >::const_iterator i = m_devices.begin (); i != m_devices.end (); ++i)
{
Ptr<SimpleNetDevice> 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<Scheduler> sched = CreateObject<ListScheduler> ();
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<Node> 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>