RsvpMplsRouter

Package: inet.node.mpls

RsvpMplsRouter

compound module

An RSVP-TE capable router.

RsvpTe occupies the Transport layer; however, it is not a transport protocol itself. RsvpTe uses transport protocols to route packets. Ted is used to calculate shortest paths.

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=100,400;is=s");
} interfaceTable : InterfaceTable

Keeps the table of network interfaces.

Source:
interfaceTable: InterfaceTable {
    parameters:
        @display("p=100,200;is=s");
} ted : Ted

Traffic Engineering Database.

Source:
ted: Ted {
    parameters:
        @display("p=100,500;is=s");
} linkStateRouting : LinkStateRouting

This module implements a very minimalistic link state routing protocol.

Source:
linkStateRouting: LinkStateRouting {
    parameters:
        peers = parent.peers;
        @display("p=600,80");
} rsvp : RsvpTe

Implements RSVP-TE, a signalling protocol for MPLS.

Source:
rsvp: RsvpTe {
    parameters:
        peers = parent.peers;
        classifierModule = "^.classifier";
        @display("p=300,80");
} classifier : like IIngressClassifier

RsvpClassifier: Table-base ingress classifier.

IIngressClassifier: Module interface for ingress packet classifiers for MPLS.

Source:
classifier: <default("RsvpClassifier")> like IIngressClassifier {
    parameters:
        @display("p=100,100;is=s");
} tn : MessageDispatcher

This module connects multiple applications, protocols and interfaces with each other and...

Source:
tn: MessageDispatcher {
    parameters:
        @display("p=450,160;b=500,5,,,,1");
} ipv4 : Ipv4NetworkLayer

Network layer of an IPv4 node.

Source:
ipv4: Ipv4NetworkLayer {
    parameters:
        @display("p=450,240");
} nm : MessageDispatcher

This module connects multiple applications, protocols and interfaces with each other and...

Source:
nm: MessageDispatcher {
    parameters:
        @display("p=450,320;b=500,5,,,,1");
} lo[numLoInterfaces] : like ILoopbackInterface

LoopbackInterface: This module implements a loopback network interface.

ILoopbackInterface: This module interface is implemented by loopback network interfaces.

Source:
lo[numLoInterfaces]: <default("LoopbackInterface")> like ILoopbackInterface {
    @display("p=250,560");
} ppp[sizeof(pppg)] : like IPppInterface

PppInterface: This module implements a PPP network interface.

IPppInterface: This module interface is implemented by PPP network interfaces.

Source:
ppp[sizeof(pppg)]: <default("PppInterface")> like IPppInterface {
    parameters:
        @display("p=400,560,row,150;q=l2queue");
} mpls : Mpls

Implements the MPLS protocol.

Source:
mpls: Mpls {
    parameters:
        classifierModule = "^.classifier";
        @display("p=450,400");
} libTable : LibTable

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

Source:
libTable: LibTable {
    parameters:
        @display("p=100,300;is=s");
} ml : MessageDispatcher

This module connects multiple applications, protocols and interfaces with each other and...

Source:
ml: MessageDispatcher {
    parameters:
        @display("p=450,480;b=500,5,,,,1");
}

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
numLoInterfaces int 1
peers string
routerId string "auto"

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

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
rsvp.interfaceTableModule string

The path to the InterfaceTable module

rsvp.routingTableModule string
rsvp.libTableModule string
rsvp.tedModule string
rsvp.traffic xml xml("")

specifies paths to set up

rsvp.helloInterval double
rsvp.helloTimeout double
tn.displayStringTextFormat string "processed %p pk (%l)"

determines the text that is written on top of the submodule

tn.forwardServiceRegistration bool true
tn.forwardProtocolRegistration bool true
ipv4.routingTable.interfaceTableModule string

The path to the InterfaceTable module

ipv4.routingTable.routerId string "auto"

for routers, the router id using IPv4 address dotted notation; specify "auto" to select the highest interface address; should be left empty ("") for hosts

ipv4.routingTable.netmaskRoutes string "*"

maintain netmask routes for interfaces

ipv4.routingTable.forwarding bool true

turns IP forwarding on/off

ipv4.routingTable.multicastForwarding bool false

turns multicast forwarding on/off

ipv4.routingTable.useAdminDist bool false

Use Cisco like administrative distances

ipv4.routingTable.routingFile string ""

routing table file name

ipv4.natTable.networkProtocolModule string "^.ip"
ipv4.natTable.config xml xml("")

XML configuration parameters for network address translation

ipv4.up.displayStringTextFormat string "processed %p pk (%l)"

determines the text that is written on top of the submodule

ipv4.up.forwardServiceRegistration bool true
ipv4.up.forwardProtocolRegistration bool true
ipv4.icmp.interfaceTableModule string

The path to the InterfaceTable module

ipv4.icmp.routingTableModule string
ipv4.icmp.crcMode string "declared"
ipv4.icmp.quoteLength int 8B

Number of bytes from original packet to quote in ICMP reply

ipv4.mp.displayStringTextFormat string "processed %p pk (%l)"

determines the text that is written on top of the submodule

ipv4.mp.forwardServiceRegistration bool true
ipv4.mp.forwardProtocolRegistration bool true
ipv4.lp.displayStringTextFormat string "processed %p pk (%l)"

determines the text that is written on top of the submodule

ipv4.lp.forwardServiceRegistration bool true
ipv4.lp.forwardProtocolRegistration bool true
nm.displayStringTextFormat string "processed %p pk (%l)"

determines the text that is written on top of the submodule

nm.forwardServiceRegistration bool true
nm.forwardProtocolRegistration bool true
mpls.interfaceTableModule string

The path to the InterfaceTable module

mpls.libTableModule string
libTable.config xml xml("")

table contents to be loaded on startup

ml.displayStringTextFormat string "processed %p pk (%l)"

determines the text that is written on top of the submodule

ml.forwardServiceRegistration bool true
ml.forwardProtocolRegistration bool true

Source code

//
// An RSVP-TE capable router.
//
// ~RsvpTe occupies the Transport layer; however, it is not a transport protocol
// itself. ~RsvpTe uses transport protocols to route packets. ~Ted is used
// to calculate shortest paths.
//
module RsvpMplsRouter
{
    parameters:
        @networkNode();
        @labels(node,mpls-node);
        @display("i=abstract/router");
        bool hasStatus = default(false);
        int numLoInterfaces = default(1);
        string peers;
        string routerId = default("auto");
        *.forwarding = true;
        *.routingTable.routerId = this.routerId;
        *.interfaceTableModule = default(absPath(".interfaceTable"));
        *.routingTableModule = default(absPath(".ipv4.routingTable"));
        *.tedModule = default(absPath(".ted"));
        *.rsvpModule = default(absPath(".rsvp"));
        *.libTableModule = default(absPath(".libTable"));
    gates:
        inout pppg[] @labels(PppFrame-conn);
    submodules:
        status: NodeStatus if hasStatus {
            @display("p=100,400;is=s");
        }
        interfaceTable: InterfaceTable {
            parameters:
                @display("p=100,200;is=s");
        }
        ted: Ted {
            parameters:
                @display("p=100,500;is=s");
        }
        linkStateRouting: LinkStateRouting {
            parameters:
                peers = parent.peers;
                @display("p=600,80");
        }
        rsvp: RsvpTe {
            parameters:
                peers = parent.peers;
                classifierModule = "^.classifier";
                @display("p=300,80");
        }
        classifier: <default("RsvpClassifier")> like IIngressClassifier {
            parameters:
                @display("p=100,100;is=s");
        }
        tn: MessageDispatcher {
            parameters:
                @display("p=450,160;b=500,5,,,,1");
        }
        ipv4: Ipv4NetworkLayer {
            parameters:
                @display("p=450,240");
        }
        nm: MessageDispatcher {
            parameters:
                @display("p=450,320;b=500,5,,,,1");
        }
        lo[numLoInterfaces]: <default("LoopbackInterface")> like ILoopbackInterface {
            @display("p=250,560");
        }
        ppp[sizeof(pppg)]: <default("PppInterface")> like IPppInterface {
            parameters:
                @display("p=400,560,row,150;q=l2queue");
        }
        mpls: Mpls {
            parameters:
                classifierModule = "^.classifier";
                @display("p=450,400");
        }
        libTable: LibTable {
            parameters:
                @display("p=100,300;is=s");
        }
        ml: MessageDispatcher {
            parameters:
                @display("p=450,480;b=500,5,,,,1");
        }
    connections allowunconnected:
        linkStateRouting.ipOut --> tn.in++;
        tn.out++ --> linkStateRouting.ipIn;
        ipv4.transportOut --> tn.in++;
        tn.out++ --> ipv4.transportIn;

        rsvp.ipOut --> tn.in++;
        rsvp.ipIn <-- tn.out++;

        ipv4.ifOut --> nm.in++;
        nm.out++ --> ipv4.ifIn;

        for i=0..numLoInterfaces-1 {
            lo[i].upperLayerOut --> nm.in++;
            nm.out++ --> lo[i].upperLayerIn;
        }

        for i=0..sizeof(pppg)-1 {
            pppg[i] <--> ppp[i].phys;

            ppp[i].upperLayerOut --> ml.in++;
            ml.out++ --> ppp[i].upperLayerIn;
        }
        mpls.lowerLayerOut --> ml.in++;
        ml.out++ --> mpls.lowerLayerIn;
        nm.out++ --> mpls.upperLayerIn;
        mpls.upperLayerOut --> nm.in++;
}

File: src/inet/node/mpls/RsvpMplsRouter.ned