OMNeT++ Manual – Node Architecture
it is usually defined as having parametric type as it has multiple implementations to
accomodate different needs (DropTailQueue, REDQueue, DropTailQoSQueue, etc.) Most
MACs also have an internal queue to allow operation without an external queue module,
the advantage being smaller overhead. The NIC’s entry in the host’s InterfaceTable is
usually registered by the MAC module at the beginning of the simulation.
• Network layer. Modules that represent protocols of the network layer are usually
grouped into a compound module: NetworkLayer for IP, and NetworkLayer6 for IPv6.
NetworkLayer contains the modules IP, ARP, ICMP and ErrorHandling. The IP mod-
ule performs IP encapsulation/decapsulation and routing of datagrams; for the latter it
accesses the C++ function call interface of the RoutingTable. Packet forwarding can be
turned on/off via a module parameter. The ARP module is put into the path of packets
leaving the network layer towards the NICs, and performs address resolution for inter-
faces that need it (e.g. Ethernet). ICMP deals with sending and receiving ICMP packets.
The ErrorHandling module receives and logs ICMP error replies. The IPv6 network
layer, NetworkLayer6 contains the modules IPv6, ICMPv6, IPv6NeighbourDiscovery
and IPv6ErrorHandling. For Mobile IPv6 simulations (xMIPv6 project [TODO]), Net-
workLayer6 is extended with further modules.
• Transport layer protocols. Transport protocols are represented by modules connected
to the network layer; currently TCP, UDP and SCTP are supported. TCP has several
implementations: TCP is the OMNeT++ native implementation; the TCP_lwip module
wraps the lwIP TCP stack [TODO]; and the TCP_NSC module wraps the Network Sim-
ulation Cradle library [TODO]. For this reason, the tcp submodule is usually defined
with a parametric submodule type ("tcp: <tcpType> like ITCP"). UDP and SCTP
are implemented by the UDP and SCTP modules, respectively.
• Applications. Application modules typically connect to TCP and/or UDP, and model the
user behavior as well as the application program (e.g. browser) and application layer
protocol (e.g. HTTP). For convenience, StandardHost supports any number of UDP, TCP
and SCTP applications, their types being parametric ("tcpApp[numTcpApps]: <tc-
pAppType> like TCPApp; udpApp[numUdpApps]: <udpAppType> like UDPApp;
..."). This way the user can configure applications entirely from omnetpp.ini, and
does not need to write a new NED file every time different applications are needed in a
host model. Application modules are typically not present in router models.
• Routing protocols. Router models typically contain modules that implement routing
protocols such as OSPF or BGP. These modules are connected to the TCP and/or the
UDP module, and manipulate routes in the RoutingTable module via C++ function
calls.
• MPLS modules. Additional modules are needed for MPLS simulations. The MPLS module
is placed between the network layer and NICs, and implements label switching. MPLS
requires a LIB module (Label Information Base) to be present in the router which it
accesses via C++ function calls. MPLS control protocol implementations (e.g. the RSVP
module) manage the information in LIB via C++ calls.
• Relay unit. Ethernet (and possibly other) switch models may contain a relay unit, which
switches frames among Ethernet (and other IEEE 802) NICs. Concrete relay unit types
include MACRelayUnitPP and MACRelayUnitNP, which differ in their performance mod-
els.
• Battery module. INET extensions uses for wireless sensor networks (WSNs) may add
a battery module to the node model. The battery module would keep track of energy
consumption. A battery module is provided e.g. by the INETMANET project.
10