MTU Probing for Linux

John Heffner <jheffner@psc.edu>


This work has been pulled into the mainline Linux kernel, and is now available in versions 2.6.17 and greater. This page is now obsolete.


This is an implementation of TCP Packetization Layer Path MTU Discovery (current internet-draft). The patches are against Linus's development tree, so they may need minor fixups if applied against official releases. It currently has some debugging printk's, and does not fully implement the spec, but I beleive it more or less works. (I've been running it myself without too much trouble.)

I'm very interested in any feedback on areas where it does not work well. I am actively working on this patch and I have a number of TODO items. Keep checking back for new versions.

For more detail, see my implementor's report from IETF 62. Also, an update from IETF 64.

Download

Change Log

December 6, 2005: Version 06 for 2.6.15-rc4.

  • Fix some issues with resegmenting and checksum offloading.
  • Change initialization of search_high to be from mss_clamp.

November 30, 2005: Version 05 for 2.6.15-rc2.

  • Forward port to 2.6.15-rc2

March 31, 2005: Version 04 for 2.6.12-rc1.

  • Added my own version of black hole discovery. Now tcp_mtu_probing takes three values:
    • 0: disabled
    • 1: enabled when black hole detected
    • 2: always enabled
    A black hole is detected when retries ≥ tcp_retries1. On subsequent timeouts, search_low is halved.

March 30, 2005: Version 03 for 2.6.12-rc1.

  • Removed the verification phase. I'm not convinced it's worth doing, and it makes things a bit simpler and faster without it.
  • Miscellaneous cleanups and simplifications.

March 21, 2005: Version 02 for 2.6.12-rc1.

  • Set flags (ACK and PSH) correctly on probe segments. Before, ACK wasn't ever set on probe segments, causing them to be dropped by most TCP stacks. Big bug. :-)

March 6, 2005: Version 01 for 2.6.11.

  • Initial patch posting.

Historic

PMSSD, an old patch for 2.4 predating the PLPMTUD internet draft.

Kevin Lahey's NetBSD implementation, from approximately the same time.