NetworkInterface

Package: inet.networklayer.common

compound module NetworkInterface

Serves as the base module for all network interfaces.

Display string directives:

  • %i: interface ID

  • %m: MAC address

  • %n: interface name

  • %a: network address

Usage diagram

Inheritance diagram

Known subclasses

Name

Type

Description

ExtInterface

compound module

A base for external network interfaces, network interface modules that connect the simulation to the network stack of the host OS.

AckingWirelessInterface

compound module

Implements a highly abstracted wireless network interface (NIC) that uses a trivial MAC protocol. It offers simplicity for scenarios where Layer 1 and 2 effects can be completely ignored, for example testing the basic functionality of a wireless ad-hoc routing protocol.

WirelessInterface

compound module

Implements a generic wireless network interface.

EthernetInterface

compound module

Represents an Ethernet network interface.

EthernetPlcaInterface

compound module

Implements a network interface that is suitable for use in Ethernet 10BASE-T1S multidrop links. Such a multidrop link uses the Ethernet Phyisical Layer Collision Avoidance (PLCA) protocol. The protocol is defined in the IEEE 802.3cg-2019 standard. This network interface can be used in any network node module (e.g. StandardHost) that allows replacing its network interfaces. All network interfaces on the same multidrop link must use this module.

LayeredEthernetInterface

compound module

Implements an Ethernet network interface.

Ieee80211Interface

compound module

Implements an IEEE 802.11 network interface. It implements a large subset of the IEEE 802.11 standard, and may use radio models and wireless signal representations of varying levels of detail. It is also extremely configurable, and its component structure makes it easy to experiment with various details of the protocol.

Ieee802154NarrowbandInterface

compound module

Implements an IEEE 802.15.4 narrowband network interface.

Ieee802154UwbIrInterface

compound module

Implements an IEEE 802.15.4 UWB-IR network interface.

LoopbackInterface

compound module

Implements a loopback network interface.

PppInterface

compound module

Implements a PPP network interface.

TunInterface

compound module

Implements a (simulated) TUN network interface.

VirtualInterface

compound module

Implements a virtual network interface.

Ipv6TunnelInterface

compound module

A virtual network interface that tunnels IPv6 traffic in IPv6 (RFC 2473). Traffic routed to this interface is encapsulated toward destination and handed back to IPv6 for forwarding; the IPv6 core needs no tunneling-specific knowledge. Plugs into the tun[] slot of nodes like any ITunnelInterface.

InterfaceService

compound module

(no description)

Extends

Name

Type

Description

Module

compound module

Base module for all INET compound modules.

Parameters

Name

Type

Default value

Description

displayStringTextFormat

string

“%a (%i)\n%m”

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

recordPcap

bool

false

numPcapRecorders

int

recordPcap ? 1 : 0

Properties

Name

Value

Description

class

NetworkInterface

display

i=block/ifcard

lifecycleSupport

networkInterface

Signals

Name

Type

Unit

Description

packetDropped

inet::Packet

Statistics

Name

Title

Source

Record

Unit

Interpolation Mode

Description

packetDropInterfaceDown

packet drops: interface down

packetDropReasonIsInterfaceDown(packetDropped)

count,sum(packetBytes),vector(packetBytes)

none

packetDropNoCarrier

packet drops: no carrier

packetDropReasonIsNoCarrier(packetDropped)

count,sum(packetBytes),vector(packetBytes)

none

Unassigned submodule parameters

Name

Type

Default value

Description

pcapRecorder.displayStringTextFormat

string

“rec: %n pks”

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

pcapRecorder.verbose

bool

true

Whether to log packets on the module output

pcapRecorder.recordEmptyPackets

bool

true

Specifies if zero length packets are recorded or not

pcapRecorder.enableConvertingPackets

bool

true

Specifies if converting packets to link type is allowed or not

pcapRecorder.pcapFile

string

“”

The PCAP file to be written, suggested value: pcapFile = “${resultdir}/${configname}-#${runnumber}” + fullpath() + “.pcap”

pcapRecorder.fileFormat

string

“pcapng”

pcapRecorder.snaplen

int

65535

Maximum number of bytes to record per packet

pcapRecorder.timePrecision

int

6

Time precision in recorded file. pcap supports only 6 (usec) or 9 (nanosec), pcapng supports more values (see ‘if_tsresol’ option in pcapng file format).

pcapRecorder.dumpBadFrames

bool

true

Enable dump of frames with hasBitError

pcapRecorder.sendingSignalNames

string

“transmissionEnded”

Space-separated list of outbound packet signals to subscribe to

pcapRecorder.receivingSignalNames

string

“receptionEnded”

Space-separated list of inbound packet signals to subscribe to

pcapRecorder.dumpProtocols

string

“ethernetmac ppp ieee80211mac”

Space-separated list of protocol names as defined in the Protocol class

pcapRecorder.packetFilter

object

“*”

Which packets are considered, matches all packets by default

pcapRecorder.helpers

string

“”

Usable PcapRecorder::IHelper helpers for accept packettype and store/convert packet as specified linktype

pcapRecorder.alwaysFlush

bool

false

Flush the pcapFile after each write to ensure that all packets are captured in case of a crash

Source code

//
// Serves as the base module for all network interfaces.
//
// Display string directives:
// - %i: interface ID
// - %m: MAC address
// - %n: interface name
// - %a: network address
//
module NetworkInterface extends Module
{
    parameters:
        displayStringTextFormat = default("%a (%i)\n%m");
        bool recordPcap = default(false);
        int numPcapRecorders = default(recordPcap ? 1 : 0);
        pcapRecorder[*].pcapFile = default("${resultdir}/${configname}-#${runnumber}" + fullPath() + ".pcap");
        **.clockModule = default(exists(clock) ? absPath(".clock") : "");
        @networkInterface;
        @lifecycleSupport;
        @class(NetworkInterface);
        @display("i=block/ifcard");
        @signal[packetDropped](type=inet::Packet);
        @statistic[packetDropInterfaceDown](title="packet drops: interface down"; source=packetDropReasonIsInterfaceDown(packetDropped); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[packetDropNoCarrier](title="packet drops: no carrier"; source=packetDropReasonIsNoCarrier(packetDropped); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
    submodules:
        pcapRecorder[numPcapRecorders]: PcapRecorder {
            parameters:
                moduleNamePatterns = ".^";
                @display("p=100,100;is=s");
        }
        clock: <default("")> like IClock if typename != "" {
            parameters:
                @display("p=100,200;is=s");
        }
}

File: src/inet/networklayer/common/NetworkInterface.ned