
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).
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.