MPLS traceroute and MPLS propagation TTL

Area 0 is the MPLS network i.e. m1,m2 and m3 are LSRs.

All serial links among the m1,m2 and m3 routers have the same bandwidth, I need mpls trace to test if the mpls is operational as configured.

Suppose I want to use loopback reachability to test, I am using m1 loopback and traceroute to m3 loopback.


m1#traceroute 10.10.10.3
Type escape sequence to abort.
Tracing the route to 10.10.10.3
VRF info: (vrf in name/id, vrf out name/id)
  1 10.1.1.6 4 msec *  0 msec
m1#

Notice there is no label. This is because the out label of m1 to reach m3 loopback is “pop label”. There should be no label present when it reaches m3 se0/1/0 interface in order to reach m3 loopback address. m1 being the PHP LSR of 10.10.10.3/32 will pop a label before sending out to its se0/0/0 interface, here’s m1’s LFIB:


m1#sh mpls forwarding-table
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop
Label      Label      or Tunnel Id     Switched      interface
16         No Label   10.10.10.4/32    0             Fa0/0      10.1.1.14
17         Pop Label  10.10.10.3/32    0             Se0/0/0    point2point
18         Pop Label  10.10.10.2/32    0             Se0/1/0    point2point
19         Pop Label  10.1.1.8/30      0             Se0/1/0    point2point
           Pop Label  10.1.1.8/30      0             Se0/0/0    point2point
20         Pop Label  10.1.1.20/30     0             Se0/0/0    point2point
21         21         10.10.10.6/32    0             Se0/0/0    point2point
m1#

I am using c1841-adventerprisek9-mz.151-4.M.bin on my cisco 1841 router. I checked  Cisco feature navigator my IOS version supports mpls traceroute. I referred to the link here. I tried the command demonstrated from isohints.info but cannot find it. So the next step is to manipulate the routing path, instead of using the 10.1.1.4/30 network to reach 10.10.10.3/32, I change the cost of the two serial links or I can change the bandwidth to a lower one.

To lower the bandwidth of m1 and m3 serial links


interface Serial0/0/0
 bandwidth 512
 ip address 10.1.1.5 255.255.255.252
 mpls ip
 clock rate 2000000
end

interface Serial0/1/0
 bandwidth 512
 ip address 10.1.1.6 255.255.255.252
 mpls ip
end

The OSPF route changes the path, when RIB is updated the FIB is updated instantaneously, when FIB is updated LFIB will also be updated since LSR consults FIB to build its LFIB.


m1#traceroute 10.10.10.3
Type escape sequence to abort.
Tracing the route to 10.10.10.3
VRF info: (vrf in name/id, vrf out name/id)
  1 10.1.1.2 [MPLS: Label 16 Exp 0] 4 msec 0 msec 4 msec
  2 10.1.1.9 0 msec *  0 msec
m1#


Compare the trace with m1's LFIB:

m1#sh mpls forwarding-table
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop
Label      Label      or Tunnel Id     Switched      interface
16         No Label   10.10.10.4/32    0             Fa0/0      10.1.1.14
17         16         10.10.10.3/32    0             Se0/1/0    point2point
18         Pop Label  10.10.10.2/32    0             Se0/1/0    point2point
19         Pop Label  10.1.1.8/30      0             Se0/1/0    point2point
20         20         10.1.1.20/30     0             Se0/1/0    point2point
21         22         10.10.10.6/32    0             Se0/1/0    point2point
m1#

Tips to read the LFIB
1. If the outgoing label is No Label, and the next hop is an ip address then this means the router's outgoing interface connected to the destination host is not MPLS enabled hence the traffic is sent out via FIB and unlabeled.

2. If the outgoing label is Pop Label then it is a PHP LSR for the FEC/prefix.

3. If outgoing label has a number/label it means it is an intermediate (aka P) LSR for the FEC/prefix that does label swapping.

MPLS TTL

By default mpls ip propagation-ttl is enabled in global configuration mode. This enabled user to trace the hops of the mpls router with labels as shown in above traceroute. This is because MPLS TTL field is copied from IP TTL field, on each MPLS LSR hop a TTL will be decremented.

To "hide" the MPLS hops you can disable it by doing no mpls ip propagation-ttl on every LSR in global configuration mode. Disabling MPLS propagation TTL will make MPLS TTL field to have a fixed 255 value, and on every MPLS LSR hop the IP TTL value will be intact. IP TTL will only be decremented when egress LSR sends out to the destination host unlabeled.

m1(config)#no mpls ip propagate-ttl
m1(config)#
m3(config)#no mpls ip propagate-ttl
m3(config)#
m2(config)#no mpls ip propagate-ttl
m2(config)#

Let's try the traceroute:

m1#traceroute 10.10.10.3 source 10.10.10.1
Type escape sequence to abort.
Tracing the route to 10.10.10.3
VRF info: (vrf in name/id, vrf out name/id)
  1 10.1.1.9 0 msec *  0 msec
m1#

Let's also verify if the LFIB is still the same:

m1#show mpls forwarding-table 10.10.10.3 32
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop
Label      Label      or Tunnel Id     Switched      interface
17         16         10.10.10.3/32    0             Se0/1/0    point2point
m1#

As observed from m1's LFIB, the label switching path is still unchanged, however due to propagation ttl was disabled enduser cannot see the actual mpls hops.

Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s