Present Location: News >> Blog >> MPLS Decoding for MTR

Blog

> MPLS Decoding for MTR
Posted by prox, from Charlotte, on March 27, 2011 at 18:29 local (server) time

Well, since the weather was crappy in Charlotte this weekend, I decided to fix a patch I had written for MTR awhile back.  Based on RFC 4950, it decodes the ICMP extensions for MPLS and prints them in the curses and report interfaces of MTR.  Here's an example:

(dax:18:12)% ./mtr --report --report-cycles=4 ns2.google.com.
HOST: dax.prolixium.com           Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- voxel.prolixium.net        0.0%     4    0.4   2.3   0.4   4.2   2.1
  2.|-- 0.ae2.tsr1.lga5.us.voxel.  0.0%     4    0.3   1.5   0.3   5.1   2.4
  3.|-- 0.ae59.tsr1.lga3.us.voxel  0.0%     4    0.4   0.4   0.4   0.4   0.0
  4.|-- google.tienyc.telxgroup.n  0.0%     4    0.4   0.4   0.4   0.4   0.0
  5.|-- 72.14.239.46               0.0%     4    0.6   4.5   0.6  16.0   7.7
  6.|-- 209.85.249.11              0.0%     4   20.9  10.6   6.8  20.9   6.9
    |   +-- [MPLS: Lbl 729852 Exp 4 S 1 TTL 1]
  7.|-- 209.85.241.222             0.0%     4   17.9  17.9  17.7  18.2   0.2
    |   +-- [MPLS: Lbl 602259 Exp 4 S 1 TTL 1]
  8.|-- 209.85.241.207             0.0%     4   17.6  17.7  17.6  17.8   0.1
  9.|-- 216.239.47.250             0.0%     4   25.5  22.8  17.6  27.3   4.4
    |  `|-- 216.239.47.242
 10.|-- ns2.google.com             0.0%     4   17.8  17.9  17.8  18.0   0.1

And here's one on my internal network showing an MPLS L3VPN with two labels in the stack (the patch will decode up to eight, if anything supports it - Juniper routers process a max of five and then give up):

(dax:18:12)% ./mtr --report --report-cycles=4 -4 -n janeway
HOST: dax.prolixium.com           Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 10.3.254.17                0.0%     4   34.4  33.9  30.6  36.2   2.4
  2.|-- 10.3.7.249                 0.0%     4   32.5  32.1  31.1  33.6   1.2
  3.|-- 10.3.8.46                  0.0%     4   31.7  31.8  31.5  32.0   0.2
  4.|-- 10.3.8.54                  0.0%     4   32.4  33.2  31.8  35.4   1.6
  5.|-- 10.3.8.102                 0.0%     4   33.2  34.0  31.7  36.1   1.9
  6.|-- 10.3.8.77                  0.0%     4   32.9  37.9  32.9  47.8   6.7
  7.|-- 10.3.8.62                  0.0%     4   33.1  34.4  33.1  35.3   0.9
    |   +-- [MPLS: Lbl 100512 Exp 0 S 0 TTL 1]
    |   +-- [MPLS: Lbl 16 Exp 0 S 1 TTL 1]
  8.|-- 10.3.8.70                  0.0%     4   38.3  35.6  33.4  38.3   2.0
    |   +-- [MPLS: Lbl 100560 Exp 0 S 0 TTL 1]
    |   +-- [MPLS: Lbl 16 Exp 0 S 1 TTL 2]
  9.|-- 10.3.8.98                  0.0%     4   47.6  42.5  39.5  47.6   3.6

I couldn't test the IPv6 support, so I left it out.  I have yet to see a service provider on the Internet expose this information in a traceroute through their public infrastructure, so I have nothing to test it with.  Due to Junos bugs, I couldn't test it in my lab, either!  I also left out support for the GTK+ fronend because I don't find it too useful (does anybody?).

Grab the patch here.  It's based on 0.80, which is currently the latest release.

Update: Use this patch, now.  It includes IPv6 support.  Thanks to Ryan Rawdon for pointing out that Cogent exposes MPLS label information on the IPv6 portion of their network, and helping me test it w/MTR.

Update: This patch is now included in the mainline MTR release starting with 0.82.  You can grab it here!

> Add Comment

New comments are currently disabled for this entry.