Package: inet.node.mpls
LDP_LSR
compound moduleAn LDP-capable router.
LDP Capable Routers are the main building blocks for an LDP MPLS network.
Usage diagram
The following diagram shows usage relationships between types. Unresolved types are missing from the diagram.
Parameters
Name | Type | Default value | Description |
---|---|---|---|
hasStatus | bool | false | |
holdTime | double | 15s | |
helloInterval | double | 5s | |
peers | string | ||
routerId | string | "auto" | |
tcpType | string | firstAvailable("TCP","TCP_lwIP","TCP_NSC") |
tcp implementation (e.g. TCP, TCP_lwIP, TCP_NSC) or TCPSpoof |
Properties
Name | Value | Description |
---|---|---|
networkNode | ||
labels | node | |
display | i=abstract/router |
Gates
Name | Direction | Size | Description |
---|---|---|---|
pppg [ ] | inout |
Unassigned submodule parameters
Name | Type | Default value | Description |
---|---|---|---|
status.initialStatus | string | "UP" |
TODO @signal, @statistic |
interfaceTable.displayAddresses | bool | false |
whether to display IP addresses on links |
routingTable.interfaceTableModule | string |
The path to the InterfaceTable module |
|
routingTable.netmaskRoutes | string | "*" |
maintain netmask routes for interfaces |
routingTable.multicastForwarding | bool | false |
turns multicast forwarding on/off |
routingTable.useAdminDist | bool | false |
Use Cisco like administrative distances |
routingTable.routingFile | string | "" |
routing table file name |
ldp.interfaceTableModule | string |
The path to the InterfaceTable module |
|
ldp.routingTableModule | string | ||
ldp.libTableModule | string | ||
ldp.tedModule | string | ||
ldp.dataTransferMode | string | "bytecount" |
TCP data transfer mode |
ted.interfaceTableModule | string |
The path to the InterfaceTable module |
|
ted.routingTableModule | string | ||
linkStateRouting.interfaceTableModule | string |
The path to the InterfaceTable module |
|
linkStateRouting.routingTableModule | string | ||
linkStateRouting.tedModule | string | ||
networkLayer.configurator.interfaceTableModule | string |
The path to the InterfaceTable module |
|
networkLayer.configurator.networkConfiguratorModule | string | "configurator" |
TODO: eventually rename to networkConfigurator |
networkLayer.configurator.configureRoutingTable | bool | true |
add routing entries to routing table (uses the configurator module) |
networkLayer.ip.interfaceTableModule | string |
The path to the InterfaceTable module |
|
networkLayer.ip.routingTableModule | string | ||
networkLayer.ip.arpModule | string | ||
networkLayer.ip.icmpModule | string | ||
networkLayer.ip.procDelay | double | 0s | |
networkLayer.ip.timeToLive | int | 32 | |
networkLayer.ip.multicastTimeToLive | int | 32 | |
networkLayer.ip.fragmentTimeout | double | 60s | |
networkLayer.ip.forceBroadcast | bool | false | |
networkLayer.icmp.interfaceTableModule | string |
The path to the InterfaceTable module |
|
networkLayer.icmp.routingTableModule | string | ||
networkLayer.ipsec.networkProtocolModule | string | "^.ip" | |
networkLayer.ipsec.spdModule | string | "^.spd" | |
networkLayer.ipsec.sadModule | string | "^.sad" | |
networkLayer.ipsec.spdConfig | xml | ||
networkLayer.ipsec.defaultProtection | string | "" |
if not "": value to use where <Protection> element is absent from the configuration |
networkLayer.ipsec.defaultEspMode | string | "" |
if not "": value to use where <EspMode> element is absent from the configuration |
networkLayer.ipsec.defaultEncryptionAlg | string | "" |
if not "": value to use where <EncryptionAlg> element is absent from the configuration |
networkLayer.ipsec.defaultAuthenticationAlg | string | "" |
if not "": value to use where <defaultAuthenticationAlg> element is absent from the configuration |
networkLayer.ipsec.defaultMaxTfcPadLength | int | 0 |
value to use where <MaxTfcPadLength> element is absent from the configuration |
networkLayer.ipsec.ahProtectOutDelay | double | 0.0s | |
networkLayer.ipsec.ahProtectInDelay | double | 0.0s | |
networkLayer.ipsec.espProtectOutDelay | double | 0.0s | |
networkLayer.ipsec.espProtectInDelay | double | 0.0s | |
lo0.lo.interfaceTableModule | string |
The path to the InterfaceTable module |
|
lo0.lo.mtu | int | 4470B | |
mpls.interfaceTableModule | string |
The path to the InterfaceTable module |
|
mpls.libTableModule | string | ||
libTable.config | xml | xml(" |
table contents to be loaded on startup |
Source code
// // An LDP-capable router. // // LDP Capable Routers are the main building blocks for an LDP MPLS network. // module LDP_LSR { parameters: @networkNode(); @labels(node); @display("i=abstract/router"); bool hasStatus = default(false); double holdTime @unit("s") = default(15s); double helloInterval @unit("s") = default(5s); string peers; string routerId = default("auto"); string tcpType = default(firstAvailable("TCP","TCP_lwIP","TCP_NSC")); // tcp implementation (e.g. ~TCP, ~TCP_lwIP, ~TCP_NSC) or ~TCPSpoof *.interfaceTableModule = default(absPath(".interfaceTable")); *.routingTableModule = default(absPath(".routingTable")); *.tedModule = default(absPath(".ted")); *.libTableModule = default(absPath(".libTable")); gates: inout pppg[] @labels(PPPFrame-conn); submodules: status: NodeStatus if hasStatus { @display("p=73,45"); } interfaceTable: InterfaceTable { parameters: @display("p=73,176;is=s"); } routingTable: IPv4RoutingTable { parameters: forwarding = true; routerId = parent.routerId; @display("p=70,240"); } ldp: LDP { parameters: holdTime = parent.holdTime; helloInterval = parent.helloInterval; @display("p=222,67"); } ted: TED { parameters: @display("p=340,244"); } linkStateRouting: LinkStateRouting { parameters: peers = parent.peers; @display("p=360,150"); } tcp: <tcpType> like ITCP { parameters: @display("p=177,145"); } udp: <default(firstAvailable("UDP"))> like IUDP { parameters: @display("p=267,145"); } networkLayer: IPv4NetworkLayer { parameters: @display("p=224,223"); gates: ifIn[sizeof(parent.pppg)+1]; ifOut[sizeof(parent.pppg)+1]; } lo0: LoopbackInterface { @display("p=50,388"); } ppp[sizeof(pppg)]: <default("PPPInterface")> like IWiredNic { parameters: @display("p=131,388,row,90;q=l2queue"); } mpls: MPLS { parameters: //peers = peers, classifierModule = "^.ldp"; @display("p=224,302"); gates: netwIn[sizeof(parent.pppg)+1]; netwOut[sizeof(parent.pppg)+1]; ifIn[sizeof(parent.pppg)+1]; ifOut[sizeof(parent.pppg)+1]; } libTable: LIBTable { parameters: @display("p=340,305"); } connections allowunconnected: linkStateRouting.ipOut --> networkLayer.transportIn++; linkStateRouting.ipIn <-- networkLayer.transportOut++; ldp.tcpIn <-- tcp.appOut++; ldp.tcpOut --> tcp.appIn++; ldp.udpOut --> udp.appIn++; ldp.udpIn <-- udp.appOut++; udp.ipOut --> networkLayer.transportIn++; udp.ipIn <-- networkLayer.transportOut++; tcp.ipOut --> networkLayer.transportIn++; tcp.ipIn <-- networkLayer.transportOut++; lo0.upperLayerOut --> networkLayer.ifIn[0]; networkLayer.ifOut[0] --> lo0.upperLayerIn; for i=0..sizeof(pppg)-1 { pppg[i] <--> ppp[i].phys; ppp[i].upperLayerOut --> mpls.ifIn[i+1]; ppp[i].upperLayerIn <-- mpls.ifOut[i+1]; mpls.netwOut[i+1] --> networkLayer.ifIn[i+1]; mpls.netwIn[i+1] <-- networkLayer.ifOut[i+1]; } }File: src/inet/node/mpls/LDP_LSR.ned