LDP_LSR

Package: inet.node.mpls

LDP_LSR

compound module

An LDP-capable router.

LDP Capable Routers are the main building blocks for an LDP MPLS network.

status : NodeStatus

Keeps track of the status of network node (up, down, etc.) for other modules, and also displays it...

Source:
status: NodeStatus if hasStatus {
    @display("p=73,45");
} interfaceTable : InterfaceTable

Keeps the table of network interfaces.

Source:
interfaceTable: InterfaceTable {
    parameters:
        @display("p=73,176;is=s");
} routingTable : IPv4RoutingTable

Stores the routing table.

Source:
routingTable: IPv4RoutingTable {
    parameters:
        forwarding = true;
        routerId = parent.routerId;
        @display("p=70,240");
} ldp : LDP

Handles and processes LDP messages.

Source:
ldp: LDP {
    parameters:
        holdTime = parent.holdTime;
        helloInterval = parent.helloInterval;
        @display("p=222,67");
} ted : TED

Traffic Engineering Database.

Source:
ted: TED {
    parameters:
        @display("p=340,244");
} linkStateRouting : LinkStateRouting

This module implements a very minimalistic link state routing protcol.

Source:
linkStateRouting: LinkStateRouting {
    parameters:
        peers = parent.peers;
        @display("p=360,150");
} tcp : like ITCP

ITCP: Interface for TCP protocol implementations.

Source:
tcp: <tcpType> like ITCP {
    parameters:
        @display("p=177,145");
} udp : like IUDP

IUDP: UDP protocol interface.

Source:
udp: <default(firstAvailable("UDP"))> like IUDP {
    parameters:
        @display("p=267,145");
} networkLayer : IPv4NetworkLayer

Network layer of an IPv4 node.

Source:
networkLayer: IPv4NetworkLayer {
    parameters:
        @display("p=224,223");
    gates:
        ifIn[sizeof(parent.pppg)+1];
        ifOut[sizeof(parent.pppg)+1];
} lo0 : LoopbackInterface

Loopback interface.

Source:
lo0: LoopbackInterface {
    @display("p=50,388");
} ppp[sizeof(pppg)] : like IWiredNic

PPPInterface: PPP interface.

IWiredNic: Prototype module for link layer protocols.

Source:
ppp[sizeof(pppg)]: <default("PPPInterface")> like IWiredNic {
    parameters:
        @display("p=131,388,row,90;q=l2queue");
} mpls : MPLS

Implements the MPLS protocol.

Source:
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

Stores the LIB (Label Information Base), accessed by ~MPLS and its associated control protocols...

Source:
libTable: LIBTable {
    parameters:
        @display("p=340,305");
}

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