Mpls¶
Package: inet.networklayer.mpls
simple module Mpls
Implements the MPLS protocol.
The Mpls module is added between layer 2 and 3 in the OSI model for fast packet switching. Mpls should be transparent to signaling protocols. The signaling protocol currently implemented in this simulation is RSVP-TE.
Operations:
MPLS packets are represented by the MplsPacket class.
The local LIB (Label Information Base) is stored in a LibTable module
in the LSR.
For most of the time, the Mpls module will do the label swapping and
message forwarding. Upon receiving a labeled packet from another LSR, the
Mpls will first extract the incoming interface and incoming label pair, and then
look up the local LIB table. If an outgoing label and an outgoing interface
can be found, the module will perform appropriate label operations (PUSH,
POP, SWAP) based on the outLabel vector containing label and operation
pairs.
Collaborations:
The Mpls module is required to interact with L2 (Link Layer) and L3 (Network Layer) in the OSI model. In addition, it needs to obtain label information from the LIB component and label query result from the Ldp module. Messages the model communicates with L2 and Network Layers are L2 packets (PPP, Frame Relay, ATM, Ethernet, etc.), and IP native packets. Specifically, the Mpls module encapsulates IP packets and is encapsulated in L2 packets. Different L2 protocols may require different methods of encapsulation to inherit the L2’s QoS. This implementation follows a generic approach; it assumes no information of QoS from the link layer.
Usage diagram¶
Inheritance diagram¶
Used in compound modules¶
Name |
Type |
Description |
|---|---|---|
compound module |
Base module for MPLS-capable routers. Extends the standard Router with the MPLS data plane (Mpls, LibTable) and the Traffic Engineering Database (Ted, LinkStateRouting) common to all MPLS signaling protocols. |
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 |
|
libTableModule |
string |
||
classifierModule |
string |
The path to the module which implements the IIngressClassifier C++ interface |
Properties¶
Name |
Value |
Description |
|---|---|---|
class |
Mpls |
|
display |
i=block/switch |
Gates¶
Name |
Direction |
Size |
Description |
|---|---|---|---|
upperLayerIn |
input |
||
upperLayerOut |
output |
||
lowerLayerIn |
input |
||
lowerLayerOut |
output |
Source code¶
//
// Implements the MPLS protocol.
//
// The ~Mpls module is added between layer 2 and 3 in the OSI model for fast packet
// switching. ~Mpls should be transparent to signaling protocols. The signaling
// protocol currently implemented in this simulation is RSVP-TE.
//
// Operations:
//
// MPLS packets are represented by the `MplsPacket` class.
// The local LIB (Label Information Base) is stored in a ~LibTable module
// in the LSR.
//
// For most of the time, the ~Mpls module will do the label swapping and
// message forwarding. Upon receiving a labeled packet from another LSR, the
// ~Mpls will first extract the incoming interface and incoming label pair, and then
// look up the local LIB table. If an outgoing label and an outgoing interface
// can be found, the module will perform appropriate label operations (PUSH,
// POP, SWAP) based on the `outLabel` vector containing label and operation
// pairs.
//
// Collaborations:
//
// The ~Mpls module is required to interact with L2 (Link Layer) and L3 (Network
// Layer) in the OSI model. In addition, it needs to obtain label information
// from the LIB component and label query result from the ~Ldp module. Messages
// the model communicates with L2 and Network Layers are L2 packets (PPP,
// Frame Relay, ATM, Ethernet, etc.), and IP native packets. Specifically,
// the ~Mpls module encapsulates IP packets and is encapsulated in L2 packets.
// Different L2 protocols may require different methods of encapsulation to
// inherit the L2's QoS. This implementation follows a generic approach; it
// assumes no information of QoS from the link layer.
//
simple Mpls extends SimpleModule like IProtocolLayer
{
parameters:
@class(Mpls);
string interfaceTableModule; // The path to the InterfaceTable module
string libTableModule;
string classifierModule; // The path to the module which implements the IIngressClassifier C++ interface
@display("i=block/switch");
gates:
input upperLayerIn;
output upperLayerOut;
input lowerLayerIn;
output lowerLayerOut;
}