Showing results for 
Search instead for 
Did you mean: 

IOS behaviour for MPLS MTU

Hi everyone,

Im running an MPLS network and I seem to have some confusion with MTU behaviour changes in some releases of IOS

Typically, an IP packet is (1460 payload + 20 tcp + 20 ip) which makes up the 1500 bytes

Add one (or two) MPLS lables to that and you get a larger packet, 1504 or 1508 bytes

So to accomodate this, on my routers I have always IP MTU as default (ie 1500) and configured 'mpls mtu 1508' to accomodate two labels.

Without a larger MPLS MTU configured, I have packet loss issues with large MPLS packets.

The IP MTU I am not comfortable with changing due to other issues related to possible broken PMTUD behaviour (+ DF bit set) which will lead to packet drops in the IP world.

Now for the confusion:  In some cases on some boxes when I change the MPLS MTU to 1508, the router complains like so:

Setting the mpls mtu to xxxx on interface x/x, which is higher than the interface MTU 
xxxx. This could lead to packet forwarding problems including packet drops.

You must set the MPLS MTU values equal to or lower than the interface MTU values.

This is detailed in

However I still do not understand why:

1. changing MPLS MTU to be higher than IP MTU can lead to packet drops (the reverse is true according to my knowledge), but Im sure there is a reason here.

2. leaving MPLS MTU and IP MTU as the same (ie 1500) as per the link above, can possibly cater for large MPLS packets (eg 1460 payload +20 tcp + 20 IP + 4 MPLS Label 1 + 4 MPLS Label 2) = 1508

thanks in advance for clarifying



3 Replies 3

Marcin Latosiewicz
Cisco Employee
Cisco Employee


(The gurus are going to jump in any minute most likely, so I'll try my best).

The main part that message is relaying is that MPLS MTU should be lower or equal to interface MTU, not IP MTU.


We're talking about changing this:

not this:

Command reference is leading here (and contains a typo):

correct phrasing (AFAIK) should be:

Although you can set the MPLS MTU to a value  greater than the interface MTU, you should set the MPLS MTU to less than or  equal to the interface MTU to prevent data corruption, dropped packets,  and high CPU conditions. 
A best practice is to set the interface MTU of  the core-facing interface to a value greater than either the IP MTU or  the interface MTU of the edge-facing interface.



Hi Marcin,

thanks for your feedback.

So what we are saying is that MPLS MTU = INTERFACE MTU, and we DONT touch IP MTU and MPLS MTU on the router ?

This means that I should change the interface MTU on my router, and leave the IP MTU at 1500

In summary am I correct in saying that for 2 MPLS labels:

I should do this (Interface MTU):

router(config-if)#mtu ?

  <1500-9180>  MTU size in bytes

router(config-if)#mtu 1508

not this (MPLS MTU):

router(config-if)#mpls mtu ?

  <64-1500>  MTU (bytes)

  override   Override mpls mtu maximum of interface mtu

router(config-if)#mpls mtu 1508

And, by changing the Interface MTU on the router, I am automatically enabling the router to handle MPLS packets larger than 1500 without issues, fragmentation, drops, and neither causing issues for regular IP packets.



Yes mark,

Your understanding is correct.

Like for my link i set mtu of 4470 (and not mpls mtu) due to ATM link in network. see below one example

interface GigabitEthernet9/0/0

description xxxx


mtu 4470

bandwidth 1000000

ip address x.x.x.x

no ip redirects

no ip unreachables

no ip proxy-arp

ip router isis

ip pim sparse-mode

load-interval 30

carrier-delay msec 50

negotiation auto

mpls ip

mpls label protocol ldp

mpls traffic-eng tunnels

bfd interval 100 min_rx 100 multiplier 3

isis network point-to-point

isis metric 100000 level-2

service-policy output TEST

ip rsvp bandwidth 1000000

Hope this helps