NextHopNetworkLayer¶
Package: inet.networklayer.nexthop
compound module NextHopNetworkLayer
Provides a network layer for the next hop forwarding.
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;
}