NextHopNetworkLayer

Package: inet.networklayer.nexthop

compound module NextHopNetworkLayer

Provides a network layer for the next hop forwarding.

NextHopNetworkLayerup.out++ --> transportOutup.in++ --> transportInnextHop.transportOut --> up.in++nextHop.transportIn --> up.out++up.out++ --> echo.ipInup.in++ --> echo.ipOutlp.out++ --> arp.ifInlp.in++ --> arp.ifOutlp.out++ --> nextHop.queueInlp.in++ --> nextHop.queueOutlp.in++ --> ifInlp.out++ --> ifOutroutingTable: inet.networklayer.nexthop.NextHopRoutingTable Stores next hop routes used by the next hop forwarding protocol. Source: routingTable: NextHopRoutingTable { parameters: @display("p=100,100;is=s"); }routingTableecho: inet.networklayer.common.EchoProtocol Provides a mechanism to test network layer connectivity using echo request/response messages simi... Source: echo: EchoProtocol { parameters: @display("p=600,100"); }echoup: inet.common.MessageDispatcher Facilitates the interconnection of applications, protocols, and network interfaces, dispatching m... Source: up: MessageDispatcher { parameters: @display("p=450,200;b=480,5"); }uparp: inet.networklayer.arp.ipv4.GlobalArp Provides global address resolution without exchanging packets. Source: arp: GlobalArp { parameters: @display("p=300,300;q=pendingQueue"); }#arpnextHop: inet.networklayer.nexthop.NextHopForwarding A simplified next hop forwarding that routes datagrams using different kinds of network addresses. Source: nextHop: NextHopForwarding { parameters: @display("p=600,300;q=queue"); }#nextHoplp: inet.common.MessageDispatcher Facilitates the interconnection of applications, protocols, and network interfaces, dispatching m... Source: lp: MessageDispatcher { parameters: @display("p=450,400;b=480,5"); }lp

Usage diagram

Inheritance diagram

Parameters

Name

Type

Default value

Description

forwarding

bool

false

multicastForwarding

bool

false

interfaceTableModule

string

Properties

Name

Value

Description

display

i=block/fork

Gates

Name

Direction

Size

Description

ifIn

input

ifOut

output

transportIn

input

transportOut

output

Unassigned submodule parameters

Name

Type

Default value

Description

routingTable.displayStringTextFormat

string

“”

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

routingTable.interfaceTableModule

string

The path to the InterfaceTable module

routingTable.addressType

string

“modulepath”

routingTable.routerId

string

“auto”

For routers, the router id using address dotted

routingTable.forwarding

bool

true

Turns IP forwarding on/off

routingTable.multicastForwarding

bool

false

Turns multicast forwarding on/off

echo.displayStringTextFormat

string

“”

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

up.displayStringTextFormat

string

“processed {numProcessedPackets} pk ({processedTotalLength})”

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

up.interfaceTableModule

string

Module path to the InterfaceTable module

up.forwardServiceRegistration

bool

true

up.forwardProtocolRegistration

bool

true

up.interfaceMapping

object

{}

Maps network interface names to connected submodule names (e.g. {“eth0”: “bridging”}), overrides automatically learned dispatching; * overrides all learned network interfaces, ? overrides default

up.serviceMapping

object

{}

Maps protocols to connected submodule names (e.g. {“ethernetmac”: “bridging”}), overrides automatically learned dispatching; * overrides all learned services, ? overrides default

up.protocolMapping

object

{}

Maps protocols to connected submodule names (e.g. {“ipv4”: “bridging”}), overrides automatically learned dispatching; * overrides all learned protocols, ? overrides default

arp.displayStringTextFormat

string

“”

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

arp.interfaceTableModule

string

Path to the InterfaceTable module

arp.addressType

string

“ipv4”

nextHop.displayStringTextFormat

string

“{nextHopStatusText}”

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

nextHop.interfaceTableModule

string

The path to the InterfaceTable module

nextHop.routingTableModule

string

nextHop.arpModule

string

nextHop.procDelay

double

0s

nextHop.hopLimit

int

32

nextHop.headerLength

int

10B

lp.displayStringTextFormat

string

“processed {numProcessedPackets} pk ({processedTotalLength})”

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

lp.interfaceTableModule

string

Module path to the InterfaceTable module

lp.forwardServiceRegistration

bool

true

lp.forwardProtocolRegistration

bool

true

lp.interfaceMapping

object

{}

Maps network interface names to connected submodule names (e.g. {“eth0”: “bridging”}), overrides automatically learned dispatching; * overrides all learned network interfaces, ? overrides default

lp.serviceMapping

object

{}

Maps protocols to connected submodule names (e.g. {“ethernetmac”: “bridging”}), overrides automatically learned dispatching; * overrides all learned services, ? overrides default

lp.protocolMapping

object

{}

Maps protocols to connected submodule names (e.g. {“ipv4”: “bridging”}), overrides automatically learned dispatching; * overrides all learned protocols, ? overrides default

Source code

//
// Provides a network layer for the next hop forwarding.
//
module NextHopNetworkLayer like INetworkLayer
{
    parameters:
        bool forwarding = default(false);
        bool multicastForwarding = default(false);
        string interfaceTableModule;
        *.forwarding = this.forwarding;
        *.multicastForwarding = this.multicastForwarding;
        *.interfaceTableModule = default(absPath(this.interfaceTableModule));
        *.routingTableModule = default(absPath(".routingTable"));
        *.arpModule = default(absPath(".arp"));
        @display("i=block/fork");
    gates:
        input ifIn @labels(INetworkHeader);
        output ifOut @labels(INetworkHeader);
        input transportIn @labels(Ipv4ControlInfo/down);
        output transportOut @labels(Ipv4ControlInfo/up);

    submodules:
        routingTable: NextHopRoutingTable {
            parameters:
                @display("p=100,100;is=s");
        }
        echo: EchoProtocol {
            parameters:
                @display("p=600,100");
        }
        up: MessageDispatcher {
            parameters:
                @display("p=450,200;b=480,5");
        }
        arp: GlobalArp {
            parameters:
                @display("p=300,300;q=pendingQueue");
        }
        nextHop: NextHopForwarding {
            parameters:
                @display("p=600,300;q=queue");
        }
        lp: MessageDispatcher {
            parameters:
                @display("p=450,400;b=480,5");
        }

    connections allowunconnected:
        up.out++ --> { @display("m=n"); } --> transportOut;
        up.in++ <-- { @display("m=n"); } <-- transportIn;

        nextHop.transportOut --> up.in++;
        nextHop.transportIn <-- up.out++;

        up.out++ --> echo.ipIn;
        up.in++ <-- echo.ipOut;

        lp.out++ --> arp.ifIn;
        lp.in++ <-- arp.ifOut;

        lp.out++ --> nextHop.queueIn;
        lp.in++ <-- nextHop.queueOut;

        lp.in++ <-- { @display("m=s"); } <-- ifIn;
        lp.out++ --> { @display("m=s"); } --> ifOut;
}

File: src/inet/networklayer/nexthop/NextHopNetworkLayer.ned