RsvpTe

Package: inet.networklayer.rsvpte

RsvpTe

simple module

Implements RSVP-TE, a signalling protocol for MPLS. The module processes RSVP-TE messages, installs labels and does the reservation along LSP paths.

Paths can be specified statically in an XML config file ("traffic" parameter), or can be set up and torn down dynamically with ScenarioManager commands.

An example traffic.xml file:

<?xml version="1.0"?>
<sessions>
    <session>
        <endpoint>host3</endpoint>
        <tunnel_id>1</tunnel_id>
        <paths>
            <path>
                <lspid>100</lspid>
                <bandwidth>100000</bandwidth>
                <route>
                    <node>10.1.1.1</node>
                    <lnode>10.1.2.1</lnode>
                    <node>10.1.4.1</node>
                    <node>10.1.5.1</node>
                </route>
                <permanent>true</permanent>
                <color>100</color>
            </path>
        </paths>
    </session>
</sessions>

In the route, <node> stands for strict hop, and <lnode> for loose hop.

RsvpTe understands the "add-session" and "del-session" ScenarioManager commands. The contents of the <add-session> element can be the same as the <session> element for the traffic.xml above. The <del-command> element syntax is also similar, but only <endpoint>, <tunnel_id> and <lspid> needs to be specified.

The following is an example scenario.xml file:

<?xml version="1.0"?>
<scenario>
    <at t="2">
        <add-session module="LSR1.rsvp">
            <endpoint>10.2.1.1</endpoint>
            <tunnel_id>1</tunnel_id>
            <paths>
                ...
            </paths>
        </add-session>
    </at>
    <at t="2.4">
        <del-session module="LSR1.rsvp">
            <endpoint>10.2.1.1</endpoint>
            <tunnel_id>1</tunnel_id>
            <paths>
                <path>
                    <lspid>100</lspid>
                </path>
            </paths>
        </del-session>
    </at>
</scenario>

RsvpTe messages are subclassed from RsvpMessage, and include RsvpPathMsg, RsvpPathTear, RsvpPathError, RsvpResvMsg and RsvpHelloMsg.

RSVP-TE communicates with the following components in the system: Ted, Mpls, and may receive commands from ScenarioManager.

Used in compound modules

Name Type Description
RsvpMplsRouter compound module

An RSVP-TE capable router.

Parameters

Name Type Default value Description
interfaceTableModule string

The path to the InterfaceTable module

routingTableModule string
libTableModule string
tedModule string
classifierModule string

The path to the module which implements the IIngressClassifier C++ interface

traffic xml xml("")

specifies paths to set up

peers string

names of the interfaces towards RSVP peers

helloInterval double
helloTimeout double

Properties

Name Value Description
display i=block/control

Gates

Name Direction Size Description
ipIn input
ipOut output
mplsSwitchIn input
appIn input

Signals

Name Type Unit
tedChanged inet::TedChangeInfo

Scheduled messages (observed)

msgkindctrltagsmsgnamecontext
HelloTimeoutMsg0hello timeout
HelloTimerMsg0hello timer
PathNotifyMsg0path notify
PsbTimerMsg0psb timer
RsbCommitTimerMsg0rsb commit
RsbRefreshTimerMsg0rsb timer

Direct method calls (observed)

call tofunctioninfo
MessageDispatcherinet::MessageDispatcher::arrivedarrived
MessageDispatcherinet::MessageDispatcher::handleRegisterProtocolhandleRegisterProtocol
InterfaceTableinet::InterfaceTable::findInterfaceByNamefindInterfaceByName
Ipv4RoutingTableinet::Ipv4RoutingTable::addRouteaddRoute(...)
Ipv4RoutingTableinet::Ipv4RoutingTable::deleteRoutedeleteRoute(...)
Ipv4RoutingTableinet::Ipv4RoutingTable::getInterfaceByAddressgetInterfaceByAddress(%u.%u.%u.%u)
Ipv4RoutingTableinet::Ipv4RoutingTable::getInterfaceForDestAddrgetInterfaceForDestAddr(%u.%u.%u.%u)
LinkStateRoutinginet::LinkStateRouting::receiveSignaltedChanged

Called methods (observed)

functioninfocall from
inet::RsvpTe::addSessionaddSessionScenarioManager
inet::RsvpTe::delSessiondelSessionScenarioManager
inet::RsvpTe::handleOperationStagehandleOperationStageScenarioManager

Incoming messages (observed)

gatemsgkindctrlsrcModuletags
ipInPacket0Ipv4DispatchProtocolReq, DscpInd, EcnInd, HopLimitInd, InterfaceInd, L3AddressInd, NetworkProtocolInd, PacketProtocolTag, TosInd

Outgoing messages (observed)

gatemsgkindctrldestModuletags
ipOutPacket0Ipv4DispatchProtocolInd, DispatchProtocolReq, L3AddressReq, PacketProtocolTag, DscpInd?, EcnInd?, HopLimitInd?, InterfaceInd?, L3AddressInd?, NetworkProtocolInd?, TosInd?

Packet operations (observed)

chunkTypepacketAction
trim, trimFront
RsvpHelloMsginsertAtBack, peekAtFront
RsvpMessagepeekAtFront
RsvpPathErrorinsertAtBack, peekAtFront
RsvpPathMsginsertAtBack, peekAtFront
RsvpPathTearinsertAtBack, peekAtFront
RsvpResvMsginsertAtBack, removeAtFront

Shared Tagging operations (observed)

tagTypetagAction
DispatchProtocolIndaddTagIfAbsent
DispatchProtocolReqaddTagIfAbsent
L3AddressIndgetTag
L3AddressReqaddTagIfAbsent
PacketProtocolTagaddTagIfAbsent

Tagging operations (observed)

tagTypetagAction
inet::Ipv4InterfaceDatafindTag, getTag

Source code

//
// Implements RSVP-TE, a signalling protocol for MPLS. The module
// processes RSVP-TE messages, installs labels and does the reservation
// along LSP paths.
//
// Paths can be specified statically in an XML config file ("traffic"
// parameter), or can be set up and torn down dynamically with ~ScenarioManager
// commands.
//
// An example traffic.xml file:
//
//# FIXME verify against the code, and document formally (DTD)!
//# <setup_pri>, <holding_pri>, <sender>, <owner>, <max_delay> elements
//# are implemented but missing from this doc!
//
// <pre>
// <?xml version="1.0"?>
// <sessions>
//     <session>
//         <endpoint>host3</endpoint>
//         <tunnel_id>1</tunnel_id>
//         <paths>
//             <path>
//                 <lspid>100</lspid>
//                 <bandwidth>100000</bandwidth>
//                 <route>
//                     <node>10.1.1.1</node>
//                     <lnode>10.1.2.1</lnode>
//                     <node>10.1.4.1</node>
//                     <node>10.1.5.1</node>
//                 </route>
//                 <permanent>true</permanent>
//                 <color>100</color>
//             </path>
//         </paths>
//     </session>
// </sessions>
// </pre>
//
// In the route, <node> stands for strict hop, and <lnode> for loose hop.
//
// ~RsvpTe understands the "add-session" and "del-session" ~ScenarioManager
// commands. The contents of the <add-session> element can be the same
// as the <session> element for the traffic.xml above.
// The <del-command> element syntax is also similar, but only
// <endpoint>, <tunnel_id> and <lspid> needs to be specified.
//
// The following is an example scenario.xml file:
//
// <pre>
// <?xml version="1.0"?>
// <scenario>
//     <at t="2">
//         <add-session module="LSR1.rsvp">
//             <endpoint>10.2.1.1</endpoint>
//             <tunnel_id>1</tunnel_id>
//             <paths>
//                 ...
//             </paths>
//         </add-session>
//     </at>
//     <at t="2.4">
//         <del-session module="LSR1.rsvp">
//             <endpoint>10.2.1.1</endpoint>
//             <tunnel_id>1</tunnel_id>
//             <paths>
//                 <path>
//                     <lspid>100</lspid>
//                 </path>
//             </paths>
//         </del-session>
//     </at>
// </scenario>
// </pre>
//
// RsvpTe messages are subclassed from ~RsvpMessage, and include ~RsvpPathMsg,
// ~RsvpPathTear, ~RsvpPathError, ~RsvpResvMsg and ~RsvpHelloMsg.
//
// RSVP-TE communicates with the following components in the system:
// ~Ted, ~Mpls, and may receive commands from ~ScenarioManager.
//
simple RsvpTe
{
    parameters:
        string interfaceTableModule;   // The path to the InterfaceTable module
        string routingTableModule;
        string libTableModule;
        string tedModule;
        string classifierModule; // The path to the module which implements the IIngressClassifier C++ interface
        xml traffic = default(xml("<sessions/>")); // specifies paths to set up
        string peers; // names of the interfaces towards RSVP peers
        double helloInterval @unit(s);
        double helloTimeout @unit(s);
        @display("i=block/control");
        @signal[tedChanged](type=inet::TedChangeInfo);
    gates:
        input ipIn @labels(Ipv4ControlInfo/up);
        output ipOut @labels(Ipv4ControlInfo/down);
        input mplsSwitchIn;
        input appIn;
}

File: src/inet/networklayer/rsvpte/RsvpTe.ned