RsvpTe

Package: inet.networklayer.rsvpte

simple module RsvpTe

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 a strict hop, and <lnode> stands for a 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> need 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>

RSVP-TE 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.

inet.networklayer.rsvpte.RsvpTeRsvpTesimple

Usage diagram

Inheritance diagram

Used in compound modules

Name

Type

Description

RsvpMplsRouter

compound module

An RSVP-TE capable MPLS router.

Extends

Name

Type

Description

SimpleModule

simple module

Base module for all INET simple modules.

Parameters

Name

Type

Default value

Description

displayStringTextFormat

string

“”

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

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(“<sessions/>”)

Specifies paths to set up

peers

string

Names of the interfaces towards RSVP peers

helloInterval

double

helloTimeout

double

Properties

Name

Value

Description

class

RsvpTe

display

i=block/control

Gates

Name

Direction

Size

Description

ipIn

input

ipOut

output

mplsSwitchIn

input

appIn

input

Signals

Name

Type

Unit

Description

tedChanged

inet::TedChangeInfo

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 a strict hop, and <lnode> stands for a 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> need 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>
//
// RSVP-TE 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 extends SimpleModule
{
    parameters:
        @class(RsvpTe);
        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