INET 3.99.1 (November 17, 2017)
Pre-release
Pre-release
This release is the second development snapshot of the upcoming INET-4.0 version.
The code is still work in progress, which means some details may change until the
final 4.0 version is released. At the moment, it requires a modified version of
OMNeT++ 5.1 or 5.2. The modification is distributed as a patch file in the
'misc/patch' folder.
The highlights of this release are:
- General
- Dropped obsolete run scripts for individual simulations. The run scripts are
replaced by a setenv script in the INET installation and separate inet scripts
in the bin folder. Run 'setenv' once from the shell to setup the environment
variables, and run 'inet', 'inet_release' or 'inet_dbg' from the simulation
directory. - Removed compatibility macros required for OMNeT++ 4.x builds. This new INET
version doesn't build with OMNeT++ 4.x versions. - Renamed the byte and bit C++ units to B and b respectively. The new names
were selected to be conformant with the IEC & IEEE unit conventions. - Fixed several memory leaks and other minor bugs.
- Shared pointer
- Added aliases for std::shared_ptr, std::make_shared, std::dynamic_pointer_cast,
etc. to support replacing the shared pointer implementation used by the new
Packet API. - Added a new shared pointer implementation (from Boost) called IntrusivePtr.
The new implementation uses only 1 counter (no weak counter) that is directly
added to the shared object using inheritance (thus intrusive). This shared
pointer is not thread safe, so it doesn't use atomic operations to increment
and decrement counters, but generally that isn't a requirement for simulation.
According to speed measurements (see tests/speed folder) the release builds
run 5-10% faster.
- CRC handling
- CRC insertion and validation code has been refactored and adapted to the new
Packet API. This change affects UDP, TCP, IPv4, IPv6, ICMPv4, ICMPv6, Ethernet,
and IEEE 802.11. The protocol modules have a parameter to control CRC handling.
They support different CRC operation modes: disabled, declared, and computed.
Either the disabled (if supported by the protocol) or the computed mode must
be selected if packets are recorded in a PCAP file.
- Ethernet
- Refactored physical layer packet representation and processing
- Cleaned up MSG files defining ethernet PHY and MAC frames and headers.
- IEEE 802.2
- Renamed the global C++ protocol variable to Protocol::ieee8022, and the global
C++ protocol group variable to ProtocolGroup::ieee8022protocol. - Fixed handling incoming packets with bit errors.
- IEEE 802.11
- Revived the FCS computation and verification. The FCS computation is optional,
you can enable it using the 'fcsMode' parameter of the Ieee80211Mac. - Fixed rate selection mechanism for control response frames. They must be sent
with a mandatory rate that is not faster than the rate of the packet for which
they are a response. If the received packet was not sent with a mandatory rate,
then they were sent with the highest mandatory rate. - Changed 802.11 OFDM error models with respect to the service field. The service
field is part of the PHY header in terms of bits, but it's sent in the data part
in terms of symbols. - Fixed PHY header length in Ieee80211Radio. Added separate PHY chunks and PHY
padding bits for completeness. This change doesn't affect the signal duration,
because it was alrady correctly computed. - Added descriptors for several parts for signals, transmissions, modes, bands,
channels, etc. The new descriptors allow inspecting of the signal meta data
in the runtime user interface. - Extended 802.11 layered error model for packet level simulation.
- CsmaCa
- Added 'fcsMode' parameter and FCS computation and verification.
- Changed headerLength and ackLength to the minimum value, any additional length
specified is represented by a separate ByteCount chunk. - Fixed error caused by receiving an ACK frame with bit errors.
- Fixed state machine when receiving unexpected frames while trying to transmit one.
- Netfilter
- Refactored netfilter hooks so that the new interface functions only get the
datagram as a parameter. Hook implementations should query and modify the
packet and/or the attached tags. For example, setting the outgoing interface
can be done by attaching an InterfaceReq tag.
- Network interface
- Added the InterfaceEntry class used by InterfaceTable to the corresponding
NIC modules, because they represent the same network interface. All network
interface modules are required to have a @Class(InterfaceEntry) property in
their NED definition. This change also allows one to see the internal state
of a network interface just by selecting its submodule in the runtime user
interface.
- Radio
- Extracted a separate IAntennaGain interface from the IAntenna interface. This
change allows the transmissions to carry directional selectivity even if the
transmitter radio gets destroyed during the propagation of the signal. - Changed transmitter lookup to use radio identifier instead of internal pointer
to fix crashes when the condition described above occurs. - Separated simsignals for transmission/reception from radio signal departure/arrival.
This allows differentiating signals at the receiver which are actually attempted
to be received as opposed to simply arriving there.
- MANET routing
- Adapted all MANET routing protocols (AODV, DYMO, and GPSR) to the refactored
INetfilter hook interface. Routing protocols query and modify the packet and/or
the attached tags as they need.
- TCP
- Removed obsolete TCP socket 'dataTransferMode' parameter from all implementations.
Applications don't have to decide upfront between sending byte count based, field
based, or raw bytes based packets. With the new API, applications can send any
combination of the above over the same connection.
- Visualizer
- Added a new set of integrated visualizer modules called IntegratedMultiVisualizer,
IntegratedMultiCanvasVisualizer, and IntegratedMultiOsgVisualizer. These modules
contain a submodule vector of all special purpose visualizers inside as opposed
to a single instance. This change allows, for example, one to easily configure
several visualizers to display various aspects of the simulation differently.