MPLS MRU

The purpose of the MPLS MRU (Maximum Receive Unit) is to indicate the maximum size of a packet, including MPLS labels, that the local router router can forward without fragmenting. MRU is only locally significant.

If an incoming packet belonging to a particular FEC (Forwarding Equivalence Class) exceeds the MRU calculated for that FEC, the packet will require fragmentation prior to it being transmitted on the outgoing interface.

The MRU for each FEC varies depending on the MTU of the outgoing interface as well as the number of labels that are added / removed by the local router.

As an example please see the diagram below. R1 is sending an MPLS labeled packet destined to the loopback interface of R3 (172.16.0.3/32).

MPLS MRU

R1 has a local label of 18 for 172.16.0.3/32 and calculates an MRU of 1500 bytes based on a swap operation for R2’s advertised label of label 16.

R2 is popping a label off due to the penultimate hop pop before the IP packet is sent to R3. Based on the knowledge that the outgoing packet to R3 will be 4 bytes shorter, R2 calculates an MRU of 1504.

In this example the maximum sized unlabelled IP packet that could be sent without fragmentation would be 1496 bytes.

The MRU values along a path can be seen by performing an MPLS traceroute. The below traceroute is taken from R1 in the above example.

R1#traceroute mpls ipv4 172.16.0.3/32
Tracing MPLS Label Switched Path to 172.16.0.3/32, timeout is 2 seconds

Codes: '!' - success, 'Q' - request not sent, '.' - timeout,
  'L' - labeled output interface, 'B' - unlabeled output interface, 
  'D' - DS Map mismatch, 'F' - no FEC mapping, 'f' - FEC mismatch,
  'M' - malformed request, 'm' - unsupported tlvs, 'N' - no label entry, 
  'P' - no rx intf label prot, 'p' - premature termination of LSP, 
  'R' - transit router, 'I' - unknown upstream index,
  'X' - unknown return code, 'x' - return code 0

Type escape sequence to abort.
  0 10.0.0.0 MRU 1500 [Labels: 16 Exp: 0]
L 1 10.0.0.1 MRU 1504 [Labels: implicit-null Exp: 0] 16 ms
! 2 10.0.0.3 232 ms

In addition to this, the LFIB can also be checked on each of the routers, showing the MRU for FEC 172.16.0.3/32.

R1#show mpls forwarding-table 172.16.0.3 32 detail 
Local  Outgoing      Prefix            Bytes Label   Outgoing   Next Hop
Label  Label or VC   or Tunnel Id      Switched      interface          
18     16            172.16.0.3/32     0             Fa1/0      10.0.0.1
    MAC/Encaps=14/18, MRU=1500, Label Stack{16}
    CA0428E00006CA0328E0001C8847 00010000
    No output feature configured


R2#show mpls forwarding-table 172.16.0.3 32 detail 
Local  Outgoing      Prefix            Bytes Label   Outgoing   Next Hop
Label  Label or VC   or Tunnel Id      Switched      interface          
16     Pop Label     172.16.0.3/32     36886         Fa0/0      10.0.0.3
    MAC/Encaps=14/14, MRU=1504, Label Stack{}
    CA0628E10008CA0428E000088847 
    No output feature configured


R3#show mpls forwarding-table 172.16.0.3 32 detail 
Local  Outgoing      Prefix            Bytes Label   Outgoing   Next Hop
Label  Label or VC   or Tunnel Id      Switched      interface          
None   No Label      172.16.0.3/32     0             aggr-punt
    MAC/Encaps=0/0, MRU=0, Label Stack{}
    No output feature configured

If a push operation occurred along the forwarding path, this would cause a lower MRU on that router. If R2 was to push a label onto the stack for 172.16.0.3/32 rather than pop one off, the MRU on R2 would be 1496 bytes. The interface MTU of 1500 bytes would mean that an ingress packet larger than 1496 bytes would be larger than the 1500 byte interface MTU and therefore require fragmentation.

Leave a Reply

Your email address will not be published. Required fields are marked *