Simple Module InterfaceTable

Package: inet.networklayer.common
File: src/inet/networklayer/common/InterfaceTable.ned

C++ definition

Keeps the table of network interfaces.

Interfaces are dynamically registered by the corresponding L2 modules, e.g. PPPInterface. In addition to registered interfaces, a loopback interface will also be created. This table only contains protocol-independent properties of interfaces -- IPv4 or IPv6 specific per-interface data (addresses etc) are kept in IPv4RoutingTable and IPv6RoutingTable. Must be named as "interfaceTable".

This module has no gates; all functionality can be accessed via member functions of the C++ module class. For detailed info, please see the C++ documentation of the class (Doxygen).

Author:: Andras Varga

InterfaceTable

Usage diagram:

The following diagram shows usage relationships between types. Unresolved types are missing from the diagram.

Inheritance diagram:

The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.

Used in compound modules:

Name Type Description
AccessPoint compound module

A generic access point supporting multiple wireless radios, and multiple ethernet ports. The type of the ethernet MAC, relay unit and wireless card can be specified as parameters.

BGPRouterEx compound module

Example IP router with BGPv4 and OSPFv4 support.

BGPRouterSimple compound module

Example IPv4 router with BGPv4 support.

EtherSwitch compound module

Model of an Ethernet switch.

InternetCloud compound module

This module is an IPv4 router that can delay or drop packets (while retaining their order) based on which interface card the packet arrived on and on which interface it is leaving the cloud. The delayer module is replacable.

LDP_LSR compound module

An LDP-capable router.

NodeBase compound module

Contains the common lower layers (linklayer and networklayer) of Router, StandardHost, WirelessHost etc.

RSVP_LSR compound module

An RSVP-TE capable router.

Parameters:

Name Type Default value Description
displayAddresses bool false

whether to display IP addresses on links

Properties:

Name Value Description
display i=block/table

Signals:

Name Type Unit
NF_IPv6_MCAST_JOIN IPv6MulticastGroupInfo
NF_INTERFACE_STATE_CHANGED InterfaceEntryChangeDetails
NF_IPv4_MCAST_REGISTERED IPv4MulticastGroupInfo
NF_INTERFACE_IPv4CONFIG_CHANGED InterfaceEntryChangeDetails
NF_IPv4_MCAST_CHANGE IPv4MulticastGroupSourceInfo
NF_INTERFACE_IPv6CONFIG_CHANGED InterfaceEntryChangeDetails
NF_INTERFACE_DELETED InterfaceEntry
NF_IPv4_MCAST_LEAVE IPv4MulticastGroupInfo
NF_INTERFACE_CONFIG_CHANGED InterfaceEntryChangeDetails
NF_IPv4_MCAST_UNREGISTERED IPv4MulticastGroupInfo
NF_IPv6_MCAST_LEAVE IPv6MulticastGroupInfo
NF_IPv4_MCAST_JOIN IPv4MulticastGroupInfo
NF_INTERFACE_CREATED InterfaceEntry
NF_INTERFACE_GENERICNETWORKPROTOCOLCONFIG_CHANGED InterfaceEntryChangeDetails

Source code:

//
// Keeps the table of network interfaces.
//
// Interfaces are dynamically registered by the corresponding L2 modules, e.g.
// ~PPPInterface. In addition to registered interfaces, a loopback interface
// will also be created. This table only contains protocol-independent
// properties of interfaces -- IPv4 or IPv6 specific per-interface data
// (addresses etc) are kept in ~IPv4RoutingTable and ~IPv6RoutingTable.
// Must be named as "interfaceTable".
//
// This module has no gates; all functionality can be accessed via member
// functions of the C++ module class. For detailed info, please see the C++
// documentation of the class (Doxygen).
//
// @author: Andras Varga
//
simple InterfaceTable
{
    parameters:
        bool displayAddresses = default(false);  // whether to display IP addresses on links
        @display("i=block/table");
        @signal[NF_INTERFACE_CREATED](type=InterfaceEntry);
        @signal[NF_INTERFACE_DELETED](type=InterfaceEntry);
        @signal[NF_INTERFACE_STATE_CHANGED](type=InterfaceEntryChangeDetails);
        @signal[NF_INTERFACE_CONFIG_CHANGED](type=InterfaceEntryChangeDetails);
        @signal[NF_INTERFACE_IPv4CONFIG_CHANGED](type=InterfaceEntryChangeDetails);
        @signal[NF_INTERFACE_IPv6CONFIG_CHANGED](type=InterfaceEntryChangeDetails);
        @signal[NF_INTERFACE_GENERICNETWORKPROTOCOLCONFIG_CHANGED](type=InterfaceEntryChangeDetails);
        @signal[NF_IPv4_MCAST_JOIN](type=IPv4MulticastGroupInfo);
        @signal[NF_IPv4_MCAST_LEAVE](type=IPv4MulticastGroupInfo);
        @signal[NF_IPv4_MCAST_CHANGE](type=IPv4MulticastGroupSourceInfo);
        @signal[NF_IPv4_MCAST_REGISTERED](type=IPv4MulticastGroupInfo);
        @signal[NF_IPv4_MCAST_UNREGISTERED](type=IPv4MulticastGroupInfo);
        @signal[NF_IPv6_MCAST_JOIN](type=IPv6MulticastGroupInfo);
        @signal[NF_IPv6_MCAST_LEAVE](type=IPv6MulticastGroupInfo);
}