Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Overview

MPLS stands for MultiProtocol Label Switching. It kind of replaces IP routing - packet forwarding decision (outgoing interface and next-hop router) is no longer based on fields in IP header (usually destination address) and routing table, but on labels that are attached to packet. This approach speeds up the forwarding process because next-hop lookup becomes very simple compared to routing lookup (finding the longest matching prefix).

The efficiency of the forwarding process is the main benefit of MPLS, but it must be taken into account that MPLS forwarding disables the processing of network layer (e.g. IP) headers, therefore no network layer-based actions like NAT and filtering can be applied to MPLS forwarded packets. Any network-layer-based actions should be taken on ingress or egress of MPLS cloud, with the preferred way being ingress - this way, e.g. traffic that is going to be dropped anyway does not travel through the MPLS backbone.

In the simplest form, MPLS can be thought of as improved routing - labels are distributed by means of LDP protocol for routes that are active and a labeled packet takes the same path it would take if it was not labeled. A router that routes unlabeled packets using some route for which it has received a label from the next hop, imposes a label on the packet, and sends it to the next hop - gets MPLS switched further along its path. A router that receives a packet with a label it has assigned to some route changes the packet label with one received from the next hop of a particular route and sends a packet to the next hop. Label switched path ensures delivery of data to the MPLS cloud egress point. Applications of MPLS are based on this basic MPLS concept of label switched paths.

Another way of establishing label switching paths is traffic engineering tunnels (TE tunnels) by means of the RSVP-TE protocol. Traffic engineering tunnels allow explicitly routed LSPs and constraint-based path selection (where constraints are interface properties and available bandwidth).

Taking into account the complexity, new protocols, and applications that MPLS introduces and the differences of concepts that MPLS adds to routed/bridged networks, it is recommended to have an in-depth understanding of MPLS concepts before implementing MPLS in a production network. Some suggested reading material:

Reference

General Properties

...

PropertyDescription
dynamic-label-range (range of integer[16..1048575]; Default: 16-1048575)Range of Label numbers used for dynamic allocation. First The first 16 labels are reserved for special purposes (as defined in RFC). If you intend to configure labels statically then adjust the dynamic default range not to include numbers that will be used in a static configuration.
propagate-ttl (yes | no; Default: yes)Whether to copy TTL values from IP header to MPLS header. If this option is set to no then hops inside the MPLS cloud will be invisible from traceroutes.

...

Sub-menu: /mpls forwarding-table


Entries in this sub-menu shows show label bindings for specific routes that will be used in MPLS label switching. Properties in this menu are read-only

...

PropertyDescription
prefix (IP/Mask)Destination prefix for which labels are assigned
label (integer)Ingress MPLS label
ldp (yes | no)Whether labels are LDP signaled
nexthops ()

Array An array of the nexthopsnext-hops, each entry in the array represents one ECMP nexthopnext-hop. Array entry can contain several parameters:

  • label - egress MPLS label
  • nh - out nexthop next-hop IP address
  • interface - out the interface
out-label (integer)Label number which is added or switched to for outgoing packet.
packets (integer)Number of packets matched by this entry
te-sender
te-session 
traffic-eng Shows whether the entry is signaled by RSVP-TE (Traffic Engineering)
type (string)Type of the entry, for example, "vpls", etc.
vpls (yes | no)Shows whether the entry is used for VPLS tunnels.
vpn
vrfName of the VRF table this entry belongs to


For example, we have a forwarding table as shown below.

...

Sub-menu: /mpls interface


This menu allows to configure configuring maximum allowed MPLS MTUs (path MTU + MPLS tag size). Configuration of MPLS MTU is useful in cases when there are is a large variety of possible MTUs along the path. Configuring MPLS MTU to a minimum value that can pass all the hops will ensure that the MPLS packet will not be silently dropped on the devices that do not support big enough MTU.

Note

Listed entries are ordered, and the first entry (iterating from the top to the bottom) that matches the interface will be used.

Order The order of the entries is important due to the possibility that different interface lists can contain the same interface and in addition, that interface can be referenced directly.

Selection of the MPLS MTU happens in the following manner:

  • If the interface matched the entry from this table, then try to use configured MPLS MTU value
  • If the interface does not match any entry then consider MPLS MTU equal to L2MTU
  • If the interface does not support L2MTU, then consider MPLS MTU equal to L3 MTU

On the MPLS ingress path, MTU is chosen by min(MPLS MTU - tagsize, l3mtu). Which This means that on interfaces that do not support L2MTU and default L3 MTU is set to 1500, max path MTU will be 1500 - tag size (the interface will not be able to pass full IP frame without fragmentation). In such scenarios, L3MTU must be increased by max observed tag size.

...

PropertyDescription
comment (string; Default: )Short description of the interface
disabled (yes | no; Default: no)If set to yes then this configuration is ignored.
interface (name; Default:)Name of the interface or interface-list to match.
input (yes | no; Default: yes)Whether to allow MPLS input on the interaceinterface
mpls-mtu (integer [512..65535]; Default: 1508)Option The option represents how big packets can be carried over the interface with added MPLS labels. Read More >>


Example configuration:

Code Block
languageros
[admin@rack1_b35_CCR1036] /mpls/interface> print 
Flags: X - disabled; * - builtin 
 0    ;;; router-test
      interface=ether1 mpls-mtu=1580 input=yes 

 1    ;;; router-test
      interface=ether2 mpls-mtu=1580 input=yes 

 2    interface=all mpls-mtu=1500  

...