forked from inet-framework/inet
-
Notifications
You must be signed in to change notification settings - Fork 1
/
WHATSNEW
2658 lines (1964 loc) · 113 KB
/
WHATSNEW
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
Recent changes in the INET Framework
====================================
INET 3.6.3 (December 2017) - stable
-----------------------------------
This release contains minor bug fixes and compatibility fixes for the final
OMNeT++ 5.3 Preview 1 release. It requires OMNeT++ 5.1 or later.
TCP:
- Fixed TCP/IP Checksum calculation with odd lengths.
SCTP:
- Fixed a retransmission bug where the transmission counter was not
advanced when the data was retransmitted due to timeout.
- Fixed a bug when fast recovery was active and the cumulative TSN
advanced, the miss indications were not increased.
Packetdrill:
- The counting of Gap Reports was fixed.
- Added a new test to test fast Retransmissions.
Ieee802154NarrowbandScalarRadio:
- The bandwidth was not correctly claculated, leading to incorrect channel allocation
- The PHY header was calculated wrong
APSKScalarReceiver:
- Fixed sensitivity bug in APSKScalarReceiver found by Tobias Thiel
INET 3.6.2 (October 2017) - stable
----------------------------------
This release contains minor bug fixes and compatibility fixes for the final
OMNeT++ 5.2 release. It requires OMNeT++ 5.1 or later.
- Tcp: Fixed incorrect connection pointer in rexmitQueue.
- Edcaf: Fixed aifs calculation for customised aifsn.
- Visualization: parameter rename
- inet_featuretool: Removed warning when treating a missing feature in the state files as default.
- Updated showcases and tutorials.
- Various fixes to eliminate warnings on clang 4 and gcc 7.x.
INET 3.6.1 (July 2017) - stable
-------------------------------
This release contains minor compatibility fixes. It requires OMNeT++ 5.1 or later.
- Minor compatibility fix to work with OMNeT++ 5.2 Preview 1
- Turned on the parallel build option in the IDE project file.
INET-3.6.0 (June 2017) - stable
-------------------------------
This release contains some important new features, several bug fixes, and a few
minor enhancements. It requires OMNeT++ 5.1 or later.
Highlights in this release:
- On Windows, INET is no longer using the auto-import feature of the linker, because
it generated more than 65536 symbols. Dependent projects crashed because of this.
All INET APIs now should be prefixed with INET_API macro. (fixes #257)
- The makefile now generates separate precompiled header for debug and release mode.
This is required to be able to quicly switch between release and debug mode in the IDE.
- The IEEE 802.11 MAC model has been extended with several new components. The
implementation is entirely based on the standard IEEE 802.11™-2012 Part 11:
Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications.
The new architecture is designed to be modular to facilitate experimenting
with new policies, features and algorithms within the MAC layer. Users can
easily replace individual components with their own implementations. Policies,
which most likely to be experimented with, are extracted into their own modules.
The new model has the following replaceable built-in policies:
- ACK policy
- RTS/CTS policy
- Originator and recipient block ACK agreement policies
- MSDU aggregation policy
- Fragmentation policy
The new model also separates the following components:
- Coordination functions
- Channel access methods
- MAC data services
- Aggregation and deaggregation
- Fragmentation and defragmentation
- Block ACK agreements and reordering
- Frame exchange sequences
- Duplicate removal
- Rate selection
- Rate control
- Protection mechanisms
- Recovery procedure
- Contention
- Frame queues
- TX/RX
There are several enhancements and new features to the previous version, the
most notable are frame exchange sequences, block acknowledgement, and MSDU
aggregation.
The new version was thoroughly tested against the old one using fingerprint
tests. The tests ensure that the new version doesn't introduce any regression.
In fact, the tests brought up a few problems in the old implementation that
were fixed in the new one.
- The power model has been extended with support for charge/current based models
as opposed to the existing energy/power based ones. A new energy management
component has also been added to separate monitoring and controlling of energy
consumers and generators from the rest of the model.
- New visualizers has been added to display packet drops and link breaks, data
contained in interface tables, routes stored in routing tables, queues filled
with packets, residual capacity of energy storages, and transport connections
between network nodes. The new visualizers are also added to the already existing
integrated ones. Note: many features that work with the 2D visualizers currently
don't work with the 3D OSG visualizers.
- Added new features for various tutorials and showcases.
INET-3.5.0 (February 2017) - stable
-----------------------------------
This release contains mostly bug fixes and compatibility changes. It requires
OMNeT++ 5.1. Earlier versions of OMNeT++ are *not* compatible.
Highlights in this release:
Build:
- The build process is now using precompiled headers. This can speed up the
build process considerably.
- Feature macros (WITH_*) that show the enablement of features are now placed
into a header file (src/inet/features.h) instead of passed on the command line.
The build process adds the WITH_OSG and WITH_OSGEARTH macro to the opp_defines.h
file when WITH_OSG/WITH_OSGEARTH is set to yes. This allows the IDE to properly
highlight/disable the appropriate code fragments.
- 64-bit build is now supported on Windows.
Visualizers:
- Added a Plot figure (see InstrumentsExample).
DHCP:
- DHCP fixes.
- DHCP can now activated in a Router by setting hasDHCP=true
- Added new WirelessNetWith2DHCP example.
Radio:
- Added two-ray interference model (TwoRayInterference) as a pathoss model.
SCTP:
- Added StreamReconfig support for SCTP (by Irene Ruengeler)
GPSR:
- Allow to specify the interface name in a parameter instead of
using a hardcoded interface name.
Fixes:
- Small fixes in SimpleEnergyStorage and during Antenna initialization
- Calling IPv6RoutingTable::getInterfaceByAddress(const L3Address& address) or
findGpsrOptionFromNetworkDatagram() function caused infinite recursion.
- Radio: Fixed FreeSpacePathLoss bug in the loss formula for alpha != 2 case,
reported by Benjamin Sliwa.
- SimpleVoIPServer now resolves destAddress at startTime (instead
of initialization)
- Ieee8021dRelay: fixed a null pointer crash
- StaticConcentricMobility: fixed a rounding issue
- ICMP: fixed "icmp error answer to a fragmented udp packet" problem
- ICMP: fixing bug #64: Buffer Overflow Error
- AODV: no longer causes assertion failure when RREP-ACK arrived after a timeout
INET-3.4.0 (June 2016) - stable
-------------------------------
This INET release requires OMNeT++ 5.0. This is due to the new visualization
feature which uses the Canvas and OSG APIs introduced in OMNeT++ 5.0. Most
other parts of the codebase still builds with OMNeT++ 4.6.
Highlights is this release:
Tutorials:
- Added a Wireless Tutorial (tutorials/wireless). The tutorial consists of
several simulation models of increasing complexity, demonstrating the INET
architecture and features related to wireless communication networks. The
models are accompanied by a text which explains each step, complete with
screenshots and recorded animations.
- Added draft for a visualization tutorial.
Visualizers:
- Added a new 'visualizer' folder under 'src' that contains visualizer modules.
The current visualizer modules can display the scene (optionally with osgEarth),
the network nodes (optionally with 3D models), physical objects in
the physical environment, node mobility along with movement trail, discovered
network connectivity, discovered network routes, ongoing transmissions,
ongoing receptions, propagating radio signals, and statistics.
The visualizer modules are intentionally kept separate from network protocol
models. They are responsible for displaying various aspects of the simulation
in a graphical user interface. The most common mechanism they use is looking
up other modules and/or subscribing to the signals they emit. The visualizer
modules are compatible with both Tkenv and Qtenv. In Qtenv they are able to
display on both a 2D canvas and a 3D OSG scene.
Instrument figures:
- Implemented a facility that allows one to display various gauges, meters
and indicators in the network graphics that take their inputs from signals.
The "gadgets" themselves are figures that are added into the network using
@figure properties, and they are driven by signals via @statistic properties,
using a special result recorder ("figure") that sets the value in the target
figure. Figure types are: gauge, linearGauge, progressMeter, thermometer,
counter, indicatorLabel/indicatorText, and indexedImage. Their sources
are in src/inet/common/figures.
There is a demo in examples/visualization/instruments, and an additional
usage example in the Wireless Tutorial (tutorials/wireless).
MAC protocols:
- Added CsmaCaMac, a simple CSMA/CA-based MAC protocol with optional
acknowledgements and a retry mechanism. With the appropriate settings,
it can approximate basic 802.11b ad-hoc mode operation. The code is
based on the original Ieee80211Mac (802.11b) from 2006.
- IdealMac: Changed out-of-band ACKs to be optional.
- LMAC, BMAC, CSMA: Fixed handling of frames with bit errors.
- WirelessNic: added optional classifier submodule
- Ieee80211Mac: Resurrected link break signal for giving up a transmission.
Radio:
- The physical environment model has been extended to include a ground model.
Ground models need to implement the IGround interface that currently
contains a getElevation() method. A very simple implementation, FlatGround
is also provided.
- The TwoRayGroundReflection model has been updated to use the ground model
of the physical environment.
- Added packetReceivedFromUpper and packetSentToUpper signals.
Mobility:
- Mobility models now use the initialZ parameter even if position is
initialized from the display string.
- Added VehicleMobility that simulates turning at waypoints.
- Now all mobile nodes face (i.e. set the orientation to) the direction of
movement. This affects radio reception when direction antenna is used.
Physical enviromment:
- Added geographic coordinate system support.
- TracingObstacleLoss renamed to DielectricObstacleLoss.
Misc:
- Added ApplicationPacket that can be used as generic application payload.
Currently it contains a sequence number.
- UDPBasicApp/UDPSink: changed to use ApplicationPacket, and record
received packet sequence numbers
- RelayUnit: Added packetReceivedFromLowerSignal and packetSentToLowerSignal signals.
- AODV: Removed AODV-RERR messages for inactive routes.
- Applications: Added throughput statistic to some applications.
- IPv4: Added sentTo/receivedFrom upper/lower signals.
- Common: Added average forest "material".
- Common: Added throughput result filter.
Build:
- Added a top level 'doc' target to build all INET documentation in a single step
- Added project feature tests (tests/features)
INET-3.3.0 (June 2016) - stable
-------------------------------
This release requires OMNeT++ 4.6 or 5.0.
Build:
- Removed unnecessary -pINET from the makemake options. This caused linking
issues on Windows when 'clang' was used as a compiler. (the INET_API
macros are needed only for Visual C++)
- In makefrag, use inet_featuretool instead of scanning the compiler options
to detect the enablement of the VoIPStream and NSC features
- Fix: TCP_lwip did not compile when using the command-line make.
- Examples: 'run' script can now take parameters containing spaces (as long as
they are quoted properly)
SCTP:
- Packetdrill: Added SCTP support and socket options (by Irene Ruengeler)
- SCTP: added support for the SCTP_ACCEPT command (by Irene Ruengeler)
Physical layer:
- Added IdealObstacleLoss. This obstacle loss model determines power loss by
checking if there is any obstructing physical object along the straight
propagation path. The result is either total power loss if there was
such an object or no loss at all if there wasn't.
MANET:
- The "MANET Routing" feature (a collection of routing protocols ported
into INET from other projects) was removed from the source tree. The
removed MANET routing algorithms are still available in the INETMANET
fork of INET (https://github.com/aarizaq/inetmanet-2.0). INET now contains
the following natively implemented MANET routing protocols: AODV, DYMO, GPSR.
Fixes:
- IPv4: bug fix in IPv4 packet deserialization
- Ieee802.11: bug fix in 802.11 management code (set TID only for QoS data
frames)
- TelnetApp: bug fix (cancel pending timers correctly)
- IPv4NetworkConfigurator: bug fix: links were not properly detected by the
configurator when nodes connected to a switch were defined after the switch
in the NED file
- IPv6: double delete fixed
- IPv4RoutingTable: fix: only interfaces with the BROADCAST flag set have
local broadcast addresses
- AODV: fix: AODV stopped with an error if an ICMP error packet was received
(ICMP packets are now accepted and silently dropped)
- examples: removed obsolete fingerprints.ini files
Ethernet:
- Added a separate EtherPhyFrame class. Motivation: there was no obvious way
looking at an EtherFrame to tell whether it already contains preamble+SFD
or not.
- Change: When modeling the decapsulation from PHY header (subtracting preamble
and SFD lengths), padding to minimum frame size was also undone. This is
no longer done.
- EtherIFG renamed to EtherFilledIFG
- Catch duplex-halfduplex misconfiguration and throw error
- Fix incorrect byte counting during burst
- Serializer: adapted to the introduction of EtherPhyFrame
- Serializer: fix: CRC was in wrong byte order
- Serializer: fix: length field contained incorrect value (size of frame
instead of size of payload)
INET-3.2.4 (April 2016) - stable
--------------------------------
This is a minor maintenance release that requires either OMNeT++ 4.6,
or 5.0. (Earlier test versions of OMNeT++ will not work.)
Changes:
- build: updated inet_featuretool (the same like the opp_featuretool in OMNeT++ 5.0)
- minor fixes to make it build under both OMNeT++ 4.6 and 5.0
INET-3.2.3 (March 2016) - Stable
--------------------------------
This is a minor maintenance release that requires either OMNeT++ 4.6,
or 5.0rc or later. (Earlier test versions of OMNeT++ will not work.)
Changes:
- build: updated inet_featuretool (the same like the opp_featuretool in OMNeT++ 5.0 rc)
- several fixes to make it compatible with both OMNeT++ 4.6 and 5.0
- smoke and fingerprint tests are running on both OMNeT++ 4.6 and 5.0
- some variable renames and fixes in ieee802.11
INET-3.2.1 (January 2016) - Stable
----------------------------------
Changes:
- 802.11 MAC model: EDCA, rate control crashes fixed
- Radio: Fixed handling of abort reception/transmission.
- Added missing INET_API defines
- Physical layer: Fixed memory issues detected by valgrind
INET-3.2 (December 2015) - Stable
---------------------------------
This release requires either OMNeT++ 4.6, or 5.0b3 or later. (Earlier test
versions of OMNeT++ will not work.)
IEEE 802.11 MAC model:
- After further refinement, new features, several bugfixes and validation
testing, the new MAC model was made the default one. It was also renamed
from Ieee80211NewMac to Ieee80211Mac, while the old Ieee80211Mac became
Ieee80211OldMac.
- Improvements on the new MAC model include:
* Added fragmentation support;
* Added Onoe, ARF, AARF rate control algorithms;
* Implemented early Ack timeout;
- Validation: Several validation tests were run against the ns-3 Wifi model.
In the tested configurations, it was ensured that new Mac model behaves
*exactly* as the ns-3 model (that is, timestamped packet logs match exactly).
Discrepancies were resolved with bugfixes in our code, in the ns-3 code,
or both. Bugs found in ns-3 were reported in the ns-3 bugtracker.
See tests/misc/ns3.
Physical layer:
- Added support for the simulation of separate signal parts in the Radio.
The preamble, header and data parts can be optionally simulated
separately. This results in a more accurate simulation, because a
reception may be aborted before the data part is received.
- Added separate preambleDuration parameters to each radio transmitter for more
flexible configuration.
- Added Ieee80211IdealRadio, an ideal channel model (aka unit disc radio)
suitable for use with Ieee80211Mac.
Fixes:
- Fixed PER computation in NetworkConfiguratorBase.
- Fixed missing byte length in AODV and added control packet length configuration.
- RTT initialization was fixed in TCP (Vegas, Westwood) because the original
value caused "out of range" error with the overflow check introduced in
OMNeT++ 5.0b3.
- BPDU packet length was incorrectly set sometimes in the 802.1d model.
- Fixed incorrect sign of lastSpeed in some mobility models.
- The VoIPStream app has been updated to work with the ffmpeg version
distributed in Ubuntu 15.10
- Added some INET_API macros to compile properly on Windows.
- QoSClassifier example no longer needs the 802.11 project feature.
INET-3.1.1 (October 2015) - Stable
----------------------------------
Changes:
- Fixed build problem on Windows
INET-3.1.0 (October 2015) - Stable
----------------------------------
This release requires OMNeT++ 4.6 or later. In addition to several bug fixes,
it features the following additions compared to INET-3.0:
1. A modular and extensible new 802.11 MAC model.
It replaces the existing monolithic 802.11 MAC model that has become
increasingly difficult to maintain and extend over the years. The new MAC
has a modular design, where components can be swapped in and out. Concepts
such as contention-based channel access, frame exchange sequences, EDCA
queues, aggregation, fragmentation, duplicate detection, block acknow-
ledgement, frame rate selection, automatic rate selection, etc would
be expressed as self-contained C++ classes that implement abstract
interfaces and (may) have multiple implementations.
This kind of modular design also favours the open-source development model,
because abstract interfaces give contributors better cues on where to start
implementing a new feature, and new classes can be more readily accepted
into the codebase because changes to existing code (and thus the risk of
introducing new bugs) can be minimized.
In this initial form, it has roughly the same set of 802.11 features as the
old Ieee80211Mac module: basic DCF and EDCA, with the channel access and
some more parameters being configurable.
For now, the old Ieee80211Mac is still the default one for simulations.
To switch to using the new one, add the following line to your omnetpp.ini:
**.macType = "Ieee80211CompatibleNewMac"
Ieee80211CompatibleNewMac is a wrapper around Ieee80211NewMac to make its
parameterization similar to the old MAC.
Note that the new MAC is a compound module. You can double-click on the mac
submodule (in Tkenv) and expore its internals.
See the ChangeLog in src/inet/linklayer/ieee80211/newmac/ for more
information. The same folder also contains a presentation about the
architecture of the new MAC, as it was presented at the 2nd OMNeT++
Community Summit in September 2015 (see http://summit.omnetpp.org).
2. Packetdrill. This is a port of Google's Packetdrill testing tool into
the INET Framework.
Google released the script-based Packetdrill tool in 2013. It allows one
to test transport protocols like UDP and TCP on Linux and BSD-based
operating systems. Scripts define test cases that inject packets to the
protocol implementation under test, perform operations using the API
controlling the transport protocol, and verify the sending of packets, all
at specified times. The ported version provides a simple and powerful
method of testing transport protocols implemented in INET.
Packetdrill has been contributed by Irene Rungeler and Michael Tuexen at
FH Muenster. Packetdrill has been presented at the 2nd OMNeT++ Community
Summit in September 2015; find the paper and presentation slides
at http://summit.omnetpp.org.
3. Manet protocols in inet.routing.extras package are now disabled by default.
You can still enable the MANET feature manually or you can use INETMANET
(a fork of INET) which contains a more up to date codebase for these protocols.
4. Changes and bug fixes in the (old) 802.11 MAC:
- The default lot time was not always correctly chosen for the configured
mode (modulation and coding scheme).
- Change maxQueueSize's meaning to per AC queue. Before, maxQueueSize
referred to the total of the AC queue lengths, which could cause starvation
of higher priority queues (see ChangeLog for more info.)
- Removed external queue support, that is, the mgmt submodule in the Nic
no longer serves as a passive queue for the MAC.
INET-3.0.0 (June 2015) - Stable
-------------------------------
This release requires OMNeT++ 4.6 or later. There are numerous breaking changes
since the latest stable version (2.6). Please read this file carefully and
see the ChangeLog files in the source for more details.
Nodes:
- Modules that represent a "node" at network level should be tagged with
@networkNode property instead of @node. (The @node property name was
too generic.) The INode module interface was renamed to INetworkNode, too.
Applications:
- The functionality of PingTestApp was merged into PingApp and PingTestApp
was removed.
Network Layer:
- Refactored IPv4/IPv6 options to use TLVOptions structure.
INET-2.99.1 (May 2015) - Development
------------------------------------
This release is the last development snapshot of the upcoming INET-3.0 version.
The highlights of this release are:
1. Includes a new packet/bit/symbol level physical layer model for the 802.11
OFDM PHY according to the IEEE 802.11-2012 standard, and a hypothetical
generic packet/bit/symbol level APSK physical layer model for further
experimentation. The new implementations include forward error correction
encoding/decoding, scrambling/descrambling, interleaving/deinterleaving, and
modulation/demodulation.
2. Contains fixes for more than 300 defects found by Coverity, an online C++
static code analysis tool. The reported Defect Density is decreased to
0.5/kLoC which is considered a result. You can find the detailed results at
https://scan.coverity.com/projects/3472
3. Contains several other memory leak and memory management fixes reported by
valgrind memcheck.
4. Modernizes C++ source code using new C++11 features such as nullptr, auto
types, range loop, override, etc.
Read on for further details.
All components:
- Replaced all variants of findModuleWherever calls with module parameters,
because their behavior is non-predictable and less composable.
- Replaced most getParentModule calls with module parameters to make modules
less dependent on their context, and thus more reusable.
- Replaced UnimplementedModule and all related *_None modules with calls to
firstAvailableOrEmpty NED function, and changed affected submodules to be
present conditionally.
- Moved interface classes under contract subdirectories. Moved base classes
under base subdirectories.
- Introduced a new script called 'inet_featuretool' in the root folder of the
project that allows listing/enabling/disabling specific features from the
command line. Use 'inet_featuretool -h' for further info.
The 'make makefiles' command now uses this tool to extract the required
command line options to generate the makefile. This means that after
enabling/disabling a feature you always have to invoke 'make makefiles'
to regenerate the makefile based on the new feature enablement state.
Nodes:
- All "node type" modules implement the INode module interface so it is now
possible to create networks (using the <"actualNodeType"> like INode construct)
where the actual node type can be configured from an ini file.
Emulation:
- Network Emulation feature no longer depends on OMNeT++ to detect the presence
of PCAP. Instead the feature can be turned on/off by the user.
Common:
- Added create-module and delete-module commands to ScenarioManager.
- New macros in INETDefs.h to test INET version: INET_VERSION (format: 0xAABB
where AA is the major while BB is the minor version in hex) and
INET_PATCH_LEVEL (format: 0xCC is the patch level in hex).
- On Linux, specifying --valgrind as the first argument for the opp_run script
(or a run script in the examples folder) will start the simulation using the
'valgrind' memory profiler.
- Added a reusable HeatMapFigure and a GaugeFigure.
- Added a reusable DelayedInitializer to support static member initialization
without having to worry about the initialization order.
- Renamed ByteArrayMessage to RawPacket.
Environment:
- Added isometric view angles to physical environment visualization.
- Added class and module interfaces to physical environment.
Mobility:
- Added a new StaticConcentricMobility similar to StaticGridMobility that places
nodes on concentric circles.
- Removed TracCI and TraCIScenarioManager because these modules are maintained
in the Veins framework.
Serializer:
- Refactored packet serializer classes to use a safe buffer class to read and
write binary data. This allows parsing incorrect binary representations without
runtime errors required by bit precise physical layer models.
- Refactored recursion in serializers to be extensible with new packet formats
without modifying existing code.
- Fixed a number of packet length bugs and inconsistencies between serialized
and non-serialized forms.
Application:
- Merged NetPerfMeter application from the master branch added by Thomas Dreibholz.
PCAP:
- Allow flushing the pcapFile after each write to ensure that all packets are
captured in case of a crash.
Transport Layer:
- Added ITransportPacket interface to TCPSegment, UDPPacket, and SCTPMessage.
It allows generic handling of transport packets.
SCTP:
- Added fragPoint parameter to limit the size of fragments.
- After the handshake only send heartbeats on unconfirmed paths.
- Fixed close command handling, i.e. stop reading when the command is sent.
- Handle SACK and NR_SACK separately and use getByteLength instead of getBitLength.
- Fixed several bugs.
TCP:
- Refactored and cleaned up TCP header options.
- Fixed scaling window bug (Martin Becke).
Network Layer:
- Factored out the network topology extraction algorithm from IPv4NetworkConfigurator
into a base class.
- Added support to IPv4NetworkConfigurator for computing wireless shortest path
based on a simple packet error rate estimation.
- Added netmaskRoutes parameter to IPv4RoutingTable to control whether netmask
routes are maintained or not.
- Added useAdminDist parameter to IPv4RoutingTable to enable/disable the use
of Cisco specific routing entry extension (disabled by default).
- Added IGMPv3 implementation (the orinal code came from the ANSA project).
It has been almost fully rewritten and extended by Tamas Borbely.
Routing:
- Added PIM-DM and PIM-SM implementation. The original codebase (from the ANSA project
http://nes.fit.vutbr.cz/ansa) has been extensively reviewed, refactored and
extended by Tamas Borbely.
Configurator:
- Refactored supported metrics (hopCount, delay, dataRate, errorRate) and related
parameters in IPv4NetworkConfigurator.
- Added autoroute XML configuration element to IPv4NetworkConfigurator. It provides
parameters for the automatic route discovery. The autoroute element determines
the set of routing tables that will be modified, the set of destinations for
which the shortest path will be computed, the used metric and the cost for nodes
and links.
Link layer:
- Added TUN/TAP virtual network interfaces thanks to Irene Ruengeler. This kind
of interfaces send/receive packets to/from TUN applications.
- Updated the 802.11 MAC implementation to use the new 802.11 mode descriptors.
- Replaced the old 802.11 operational mode and modulation descriptor classes.
This change modifies the fingerprint of a few simulations, because the header
length was computed incorrectly.
- Changed the 802.11 MAC to use asynchronous commands to set the radio mode.
- Updated the 802.11 MAC state machine diagram (graphviz) to reflect the current
state of the implementation.
- Added safety guard to the 802.11 MAC against recursively calling handleWithFSM.
- Fixed packet order in transmissionQueue.
- Renamed getNetworkInterfaceModule to getInterfaceModule in InterfaceEntry.
- Improved response time on external interfaces. On Linux cSocketScheduler is now
using immediate mode to reduce the CPU usage while still maintaining a fast
sub millisec response time (Artur Scussel). On Windows and MAC OS X the polling
interval was reduced to improve the response time.
- Added support for sending NF_LINK_BREAK signal from BMAC and CSMA. This is
required for certain routing protocols (i.e. AODV) to function properly.
- Extended Ethernet macs accept raw packet
Physical layer:
- Extended the physical layer contract interfaces for layered implementations.
- Added signal representations for packet domain, bit domain, symbol domain,
sample domain and analog domain, and also added contracts for the processing
components in all of these domains.
- Added a detailed 802.11 OFDM physical layer implementation that supports
packet-level, bit-level, and symbol-level simulations in compliant, and also
in freely configurable non-compliant operational modes.
- Replaced the old 802.11 operational mode and modulation descriptor classes.
The new classes are more detailed and more complete implementations. They
supports both the flat and the layered physical layer models and provide PHY
characteristics. The implemented 802.11 modes are: DSSS, HR-DSSS, FHSS, IR,
OFDM, ERP-OFDM.
- Added IEEE 802.11 High Throughput mode descriptor. This mode is defined in
Clause 20. High Throughput (HT) PHY specification in the IEEE 802.11-2012
specification. The new HT mode makes available the Wifi n modes in the
Ieee80211ModeSet.
- Added a simple hypothetical APSK physical layer implementation that supports
packet-level, bit-level, and symbol-level simulations with widely configurable
bit-domain and symbol-domain parameters.
- Consistently moved packet level and bit level implementations into separate
subdirectories throughout the physical layer.
- Added a generic convolutional encoder/decoder, a generic additive
scrambler/descrambler, and a 802.11 specific interleaver/deinterleaver.
- Added a separate modulations folder that contains descriptor classes for
various keying techniques such as BPSK, QPSK, QAM16, QAM64, QAM256, MQAM,
DBPSK, DQPSK, MASK, MFSK, MPSK, DSSS-OQPSK-16, etc.
- Reimplemented the computation of BER and SER based on the SNIR for the QAM-like
modulations according to wikipedia.
- Added a special IntervalTree cache for efficiently computing arrival intervals
for transmissions. This change drastically increases the physical layer
performance for large networks with lots of ongoing transmissions.
- Refactored the radio medium model to support the optional representation of
PHY frames for the layered physical layer models.
- Refactored the medium analog model to simultaneously support the new layered
and the already existing flat radio signal models.
- Refactored the existing 802.11 statistical error models to use the new
operation mode descriptors.
- Extracted the BER table based 802.11 statistical error model into a separate
class. This change modifies the fingerprint of simulations that use this
error model.
- Added a new detailed 802.11 error model that computes erroneous packet
domain, bit domain or symbol domain signal representations.
- Added 802.11 OFDM PHY frame serializer.
- Extracted separate CommunicationCache classes from RadioMedium.
- Extracted separate CommunicationLog class from RadioMedium.
- Extracted a separate MediumLimitCache module from RadioMedium.
- Extracted a separate MediumVisualizer module from RadioMedium.
- Added optional recent communication heat map to MediumVisualizer.
- Renamed radio control info classes to TransmissionRequest and ReceptionIndication.
- Added Ieee80211TransmissionRequest with an optional IIeee80211Mode parameter
to allow the mac module to determine the exact physical layer operational mode.
- Added CosineAntenna and ParabolicAntenna.
- Added basic antenna array support to be used with 802.11 HT modes.
- Added arrival parameter to computeReceptionPower. Added snir parameter to
computeIsReceptionSuccessful. Added snir parameter to computeReceptionDecision.
- Added level parameter to printToStream function to better support logging.
- Fixed the indefinite heap growth bug in the RadioMedium.
Tests:
- Added separate automated tests for convolutional encoding/decoding,
interleaving/deinterleaving, scrambling/descrambling, modulation/demodulation
and various combinations.
Examples:
- Added a new detailed 802.11 OFDM radio example that supports configurable
packet-level, bit-level, and symbol-level simulations for model verification.
- Also added a simple hypothetical APSK radio example that supports configurable
packet-level, bit-level, and symbol-level simulations for model verification.
- Added a work in progress Wireless tutorial in the tutorials/wireless folder.
INET-2.99.0 (November 2014) - Development
-----------------------------------------
This release is a snapshot of the development that has begun in early 2013, and
will culminate in the release of INET-3.0. The code is work in progress, which
means all details may still change until 3.0 is reached.
This release requires OMNeT++ 4.6 or later.
The highlights of this release are:
1. Network layer refactoring that allows higher layer protocols (including
routing protocols) to be written in a network protocol agnostic manner.
2. A new physical layer model that builds upon the INET and MiXiM physical
layers, and brings them to new heights. Design goals were extreme modularity,
extensibility, the ability to support (and easily switch between) various
levels of detail, and the ability to add support for exploiting various
pieces of parallel hardware.
3. Extensive refactoring aimed at improving code quality. It includes
directory restructuring, code formatting, refactoring of init stages and
publish-subscribe communication, and more.
Read on for further details.
Geometry model:
- Added new orientation related classes: EulerAngles, Rotation, and Quaternion.
- Added new basic 3D geometry classes: LineSegment, Box, Plane, and Polygon.
- Added new 3D convex shapes: Cuboid, Sphere, Prism, and Polyhedron.
- Added new geometry cache data structures: SpatialGrid, QuadTree, and BVHTree.
Physical environment model:
- Removed obsolete classes: Obstacle, ObstacleControl, and AnnotationManager.
- Implemented a completely new physical environment model as follows.
- Added a new global PhysicalEnvironment module that provides some trivial
global properties: temperature, space limits, and a list of physical objects.
- Added a new PhysicalObject class that has shape, position, orientation,
material, and various graphics properties.
- Added a new Material class along with some default materials: vacuum, air,
copper, aluminium, wood, brick, concrete, and glass.
- Added a new IObjectCache interface for efficient physical object queries
along a line segment.
- Added IObjectCache implementations: GridObjectCache and BVHObjectCache.
- Added an XML file format to initialize the physical environment with shapes,
materials, and physical objects.
- Added support for drawing the physical objects on a compound module canvas
(Tkenv) in 2D as seen from a configured view angle.
- Added examples that demonstrate the initialization and usage of the physical
environment, the physical objects, and the configuration of the object cache.
Power model:
- Removed obsolete classes: IBattery, BasicBattery, InetSimpleBattery and Energy.
- Implemented a completely new power model.
- Added new interfaces: IEnergyConsumer, IEnergyStorage, and IEnergyGenerator.
- Added implementations: IdealEnergyStorage, and SimpleEnergyStorage.
- Added a new power consumer implementation for radios based on the radio mode,
the reception state, and the transmission state: StateBasedEnergyConsumer.
Physical layer:
- Refactored and unified the existing INET and MiXiM physical layer models into
a new extended and scalable model as follows.
- Designed new interfaces and classes to support optimistic parallel computation
of reception results utilizing multicore CPUs and/or GPUs.
- Designed new model that supports different level of details with respect to
transmitters, receivers, radio signals, antennas, propagation models, etc.
- Added new radio signal power representations: scalar and dimensional over
time, frequency, space, etc.
- Added various performance vs. accuracy tradeoff configuration options (e.g.
range filter, radio mode filter, listening mode filter, MAC address filter)
- Added concurrent transmitter and receiver radio mode (transceiver mode).
- Added separate controllable radio mode and automatic signaling of reception
state and transmission state.
- Added configurable non-zero time radio mode switching.
- Added separate power consumption model based on the radio mode, the reception
state and the transmission state.
- Added support for burst mode (back to back) transmissions.
- Introduced compile time checked physical units in C++ code to avoid conversion
errors and to enhance self documentation.
Physical layer radio model:
- Removed obsolete classes: Radio, IdealRadio, GenericRadio, GenericRadioModel,
IRadio, IRadioModel, INoiseGenerator, and some others.
- Added new interfaces: IRadio, IAntenna, ITransmitter, IReceiver, and IErrorModel.
- Added new implementation classes: Radio, IdealRadio, ScalarRadio,
DimensionalRadio, Ieee80211Radio, and Ieee802154UWBIRRadio.
- Added a number of implementation base classes and subcomponents unlisted here.
- Added and updated error model implementations: FlatErrorModel,
Ieee80211NistErrorModel, Ieee80211YansErrorModel
- Introduced controllable radio mode: off, sleep, receiver, transmitter,
transceiver, and switching.
- Introduced automatically signaled reception state: undefined, idle, busy,
synchronizing and receiving.
- Introduced automatically signaled transmission state: undefined, transmitting.
- Added new antenna classes: IsotropicAntenna, ConstantGainAntenna,
DipoleAntenna, and InterpolatingAntenna.
Physical layer radio medium model:
- Removed obsolete classes: ChannelAccess ChannelControl, IdealChannelModel,
IdealChannelModelAccess and some others.
- Added new interfaces to model the radio medium: IRadioMedium, IPropagation,
IBackgroundNoise, IPathLoss, IObstacleLoss, IAttenuation, and INeighborCache.
- Added new implementation classes: RadioMedium, IdealRadioMedium,
ScalarRadioMedium, DimensionalRadioMedium, Ieee80211RadioMedium, and
Ieee802154UWBIRRadioMedium.
- Added propagation models: ConstantTimePropagation and ConstantSpeedPropagation.
- Added background noise source models: ScalarIsotropicBackgroundNoise and
DimensionalIsotropicBackgroundNoise.
- Refactored existing path loss models: FreeSpacePathLoss, LogNormalShadowing,
TwoRayGroundReflection, NakagamiFading, RayleighFading, RicianFading, and
SUIPathLoss.
- Added new path loss models: BreakpointPathLoss and UWBIRStochasticPathLoss
from MiXiM.
- Added a new obstacle loss model: TracingObstacleLoss.
- Added INeighborCache implementations: ListNeighborCache, GridNeighborCache,
and QuadTreeNeighborCache.
Physical layer communication model:
- Removed obsolete classes: AirFrame, IdealAirFrame and SnrList.
- Added new interfaces: IRadioFrame, ITransmission, IArrival, IReception,
INoise, ISNIR, IListening, and IReceptionDecision.
- Added new implementation classes: RadioFrame, Arrival, Interference,
ScalarSNIR, DimensionalSNIR.
- Added a number of implementation base classes unlisted here.
- Added range based, narrow band scalar and dimensional signal power
representations for transmissions, receptions, and noise.
Link layer:
- Added a simple MAC protocol for testing purposes: IdealMac.
- Ported MAC protocols from MiXiM: CSMA, BMACLayer, and LMacLayer.
Network layer:
- IPv4/IPv6: dynamic registration of upper layer protocols.
TCP, UDP, SCTP, RSVP, OSPF, MANET are all merged into transport gates.
Network user modules must register their protocol number by sending
an IPRegisterProtocolCommand from initialize().
Introduced an IPSocket class that wraps the registration process.
- Refactoring: routing tables and routes now implement a common IRoutingTable
and IRoute C++ interface (details below)
Motivation: allow uniform access to the IPv4, IPv6 and possibly other routing tables;
e.g. some wireless networks may use MAC address as network address. Also, in
simulation it sometimes makes sense to work with simple abstract addresses like
module names, indices or IDs.
Being able to uniformly access routing tables containing different types of
addresses makes it possible to implement routing protocols in generic way.
I.e. the same DYMO module can work with IPv4, IPv6, MAC and other addresses
without change and recompiling.
Ingredients of this patch:
- generic L3Address class that can hold all kinds of addresses (=union)
- interfaces for generic access: IRoutingTable, IRoute, INetworkDatagram, etc.
- Ping refactoring (use generic addressing instead of hardcoded IPv4, IPv6)
- merged routing table change notification constants for IPv4 and IPv6