mturoute: A utility that measures hop-by-hop path MTU

I wanted to get in-depth details on how various MTU parameters interact in GRE/IPSec/MPLS environment. Before going into router configuration details, I wanted to have a tool that would reliably measure actual path MTU between the endpoints. After a while, Google gave me a usable link: supposedly the tracepath program on Linux does what I needed. As I'm a purely Windows user (for me, PCs are just a tool), I needed a Windows equivalent … and found mturoute, the utility that does exactly what I was looking for.Unfortunately, the original mturoute had an interesting bug: ICMP unreachable generated due to DF bit on oversized packet was accepted as a successful ping. The second run of the program always reported the correct MTU size (as Windows caches the maximum MTU per destination host), but I wanted to be more precise. Half a day later, after installing Windows SDK and Visual Studio Express on my PC, rediscovering my C programming skills and reading a lot of Winsock documentation, I've managed to fix the bugs and even add a “retry on ping timeout” feature. You can download the fixed version (source + exe) from the Articles area of my web site. It was compiled and tested on Windows XP, if you can test it on other platforms (2000, Vista), please let me know the results.

Here is a sample run of the program (the reduced path MTU is due to an MPLS-enabled GRE tunnel in the path):

$ mturoute -t 10.0.3.3
mturoute to 10.0.3.3, 30 hops max, variable sized packets
* ICMP Fragmentation is not permitted. *
* Maximum payload is 10000 bytes. *
1 --+---+++-+++-++ host: 10.0.0.1 max: 1500 bytes
2 --+---++---+++ host: 10.2.0.2 max: 1476 bytes
3 --+---+-+++++++ host: 10.0.3.3 max: 1472 bytes

11 comments:

  1. Tried but no luck:
    D:\inc\mturoute>mturoute.exe
    The system cannot execute the specified program.
    (Windows XP SP2)
    Thanx anyway for reminding about unix tracepath ;)

    ReplyDelete
  2. Works here - XP SP2

    mturoute to www.cisco.com, 30 hops max, variable sized packets
    * ICMP Fragmentation is not permitted. *
    * Maximum payload is 10000 bytes. *
    1 ---++++-+---++ host: 192.168.1.4 max: 1300 bytes
    2 ---++++-+---++ host: x1.x2.x3.x4 max: 1300 bytes
    3 4 ---++++-+---++ host: y1.y2.y3.y4 max: 1300 bytes
    5 ---++++-+---++ host: z1.z2.z3.z4 max: 1300 bytes
    6 ---++++-+---++ host: 4.68.121.213 max: 1300 bytes
    7 ---++++-+---++ host: 4.68.99.40 max: 1300 bytes
    *7 (An additional device responded for 4.68.99.40.)
    8 ---++++-+---++ host: 151.164.89.249 max: 1300 bytes
    9 -------------- host: 151.164.41.165 max: 120 bytes
    10 ---++-+++++++++ host: 64.161.0.62 max: 1202 bytes
    11 ---++++-+---++ host: 128.107.224.109 max: 1300 bytes
    12 ---++++-+---++ host: 128.107.224.6 max: 1300 bytes

    Wonder if the tool is buggy - if not, ATT has some issue @ 151.164.41.165 - 120 bytes MTU ?

    ReplyDelete
  3. @Mikhail: that's weird. I have XP SP2 as well ... and I have no idea what might have gone wrong (this was my first try at compiling a C program on an Intel platform since MS-DOS days).

    @Anonymous: I suspect they are blocking pings to a specific device. It responds to the TTL-limited probe (that's how we get its IP address), but then probably rejects the ICMP packets ... and I obviously need to check other ICMP unreachables as well.

    Thanks for the feedback!

    ReplyDelete
  4. @Anonymous: Just did some tests, it's definitely not an access-list, the program reports weird errors when hitting an IOS inbound access-list (but interestingly enough measures the MTU correctly).

    Can't imagine what would cause the problem. It looks like the ICMP echo packets are actively replied to, but with a weird reply that the program takes as a failure; if there would be no reply, you should see dots (timeouts). Can you take a Wireshark capture and send me the ICMP-related traffic?

    ReplyDelete
  5. Does not work with Vista, which is to bad,

    C:\mturoute>mturoute.exe
    The application has failed to start because its side-by-side configuration is incorrect. Please see
    the application event log for more detail.

    and here is the eventlog


    Activation context generation failed for "C:\mturoute\mturoute.exe". Dependent Assembly Microsoft.VC90.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.20706.1" could not be found. Please use sxstrace.exe for detailed diagnosis.

    ReplyDelete
  6. It looks like you have to install VC++ runtime library to run the program. They can be downloaded from Microsoft. Anyhow, this is a shame ... maybe I should install another compiler as well ;)

    ReplyDelete
  7. Thanks for showing us this great little app. We use IPSec and GRE tunnels all the time and this could have saved us some trouble a few weeks ago.

    Question on the output; what is the significance of the "---", "+++", or "..."?

    THere is my output:
    C:\temp\mroute>mturoute -t cisco.com
    mturoute to cisco.com, 30 hops max, variable sized packets
    * ICMP Fragmentation is not permitted. *
    * Maximum payload is 10000 bytes. *
    1 ---++++-+---++ host: 172.16.1.10 max: 1300 bytes
    2 ---...-...-...-...-...-...-...-...-...-...-...- host: 192.168.1.1 max:
    bytes
    3 ---++++-+---++ host: 71.243.235.1 max: 1300 bytes
    4 ---++++-+---++ host: 130.81.49.22 max: 1300 bytes
    5 ---++++-+---++ host: 130.81.10.94 max: 1300 bytes
    6 ---...-...-...-...-...-...-...-...-...-...-...- host: 130.81.15.202 max
    20 bytes
    7 ---u+...-...-..u+.u+.u+.u+.u+.u+.u+...-u+.u+ host: 151.164.41.165 max:
    bytes
    8 ---++++-+---++ host: 64.161.0.62 max: 1300 bytes
    9 ---++++-+---++ host: 128.107.224.105 max: 1300 bytes
    10 ---++++-+---++ host: 128.107.224.2 max: 1300 bytes
    11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

    Thanks

    ReplyDelete
  8. Will write a separate post documenting the outputs, just give me a few days; I'd like to implement some more debugging options to figure out what the line full of minus signs really means.

    ReplyDelete
  9. ivan are u the author of many cisco press books.

    ReplyDelete
  10. Click on the "About the author" link at the top of the page :) Yes, I wrote a few books for Cisco Press.

    ReplyDelete

You don't have to log in to post a comment, but please do provide your real name/URL. Anonymous comments might get deleted.

Ivan Pepelnjak, CCIE#1354, is the chief technology advisor for NIL Data Communications. He has been designing and implementing large-scale data communications networks as well as teaching and writing books about advanced technologies since 1990. See his full profile, contact him or follow @ioshints on Twitter.