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.
Usage diagram¶
Inheritance diagram¶
Used in compound modules¶
Name |
Type |
Description |
|---|---|---|
compound module |
An RSVP-TE capable MPLS router. |
Extends¶
Name |
Type |
Description |
|---|---|---|
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 |
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;
}