Package: inet.networklayer.rsvpte
RsvpTe
simple moduleImplements 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)
msg | kind | ctrl | tags | msgname | context |
---|---|---|---|---|---|
HelloTimeoutMsg | 0 | hello timeout | |||
HelloTimerMsg | 0 | hello timer | |||
PathNotifyMsg | 0 | path notify | |||
PsbTimerMsg | 0 | psb timer | |||
RsbCommitTimerMsg | 0 | rsb commit | |||
RsbRefreshTimerMsg | 0 | rsb timer |
Direct method calls (observed)
call to | function | info |
---|---|---|
MessageDispatcher | inet::MessageDispatcher::arrived | arrived |
MessageDispatcher | inet::MessageDispatcher::handleRegisterProtocol | handleRegisterProtocol |
InterfaceTable | inet::InterfaceTable::findInterfaceByName | findInterfaceByName |
Ipv4RoutingTable | inet::Ipv4RoutingTable::addRoute | addRoute(...) |
Ipv4RoutingTable | inet::Ipv4RoutingTable::deleteRoute | deleteRoute(...) |
Ipv4RoutingTable | inet::Ipv4RoutingTable::getInterfaceByAddress | getInterfaceByAddress(%u.%u.%u.%u) |
Ipv4RoutingTable | inet::Ipv4RoutingTable::getInterfaceForDestAddr | getInterfaceForDestAddr(%u.%u.%u.%u) |
LinkStateRouting | inet::LinkStateRouting::receiveSignal | tedChanged |
Called methods (observed)
function | info | call from |
---|---|---|
inet::RsvpTe::addSession | addSession | ScenarioManager |
inet::RsvpTe::delSession | delSession | ScenarioManager |
inet::RsvpTe::handleOperationStage | handleOperationStage | ScenarioManager |
Incoming messages (observed)
gate | msg | kind | ctrl | srcModule | tags |
---|---|---|---|---|---|
ipIn | Packet | 0 | Ipv4 | DispatchProtocolReq, DscpInd, EcnInd, HopLimitInd, InterfaceInd, L3AddressInd, NetworkProtocolInd, PacketProtocolTag, TosInd |
Outgoing messages (observed)
gate | msg | kind | ctrl | destModule | tags |
---|---|---|---|---|---|
ipOut | Packet | 0 | Ipv4 | DispatchProtocolInd, DispatchProtocolReq, L3AddressReq, PacketProtocolTag, DscpInd?, EcnInd?, HopLimitInd?, InterfaceInd?, L3AddressInd?, NetworkProtocolInd?, TosInd? |
Packet operations (observed)
chunkType | packetAction |
---|---|
trim, trimFront | |
RsvpHelloMsg | insertAtBack, peekAtFront |
RsvpMessage | peekAtFront |
RsvpPathError | insertAtBack, peekAtFront |
RsvpPathMsg | insertAtBack, peekAtFront |
RsvpPathTear | insertAtBack, peekAtFront |
RsvpResvMsg | insertAtBack, removeAtFront |
Shared Tagging operations (observed)
tagType | tagAction |
---|---|
DispatchProtocolInd | addTagIfAbsent |
DispatchProtocolReq | addTagIfAbsent |
L3AddressInd | getTag |
L3AddressReq | addTagIfAbsent |
PacketProtocolTag | addTagIfAbsent |
Tagging operations (observed)
tagType | tagAction |
---|---|
inet::Ipv4InterfaceData | findTag, 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