U-Boot: TFTP and IP fragmentation

Discussion created by Wojtek on Jan 17, 2013
Latest reply on Jan 27, 2013 by Wojtek

Hello all!

Here is a note on TFTP in U-Boot version U-Boot 2010.06-svn2356 (ADI-2010R1-pre). I know it is an old version, but the problem may be universal.


Referring to the KOOP Wiki page https://docs.blackfin.uclinux.org/doku.php?id=setting_up_a_tftp_server I want to share an observation on IP fragmentation. I setup two host Windows machines with TFTP Turbo. I could TFTP the files from one host, but not from the other. Today I finally fixed the problem. It turns out that the "bad" machine had a limit set somewhere on the Maximum Transfer Unit (MTU) that was less than the U-Boot request of 1468 bytes. The TFTP server would grant the request, but the IP packets were fragmented between the host and the Blackfin board. U-Boot was unable to reassemble the packets.


I fixed the problem by disabling the "blksize" option in the TFTP server. Now the server is ignoring U-Boot request and it is responding with short packets that do not need to be reassembled by the recipient. The TFTP transfer is now working from both machines to U-Boot.


A few more points that can be added to the Wiki page.


1. TFTP Turbo is no longer free.  Weird Solutionsis are now distributing the 30-day trial version. It is not clear whether this version will work after 30 days.

2. I switched to WinAgents TFTP server from http://www.winagents.com/. It is a 30-day trial, but the licensing policy says that after 30 days it will keep working with relatively mild restrictions. Namely, up to two concurrent transfers will be allowed after 30 days. It is fine in a prototyping environment. This TFTP server allowed me to turn off the blksize option and thus fix the fragmentation problem.

3. There is a possible TFTP solution from SolarWinds http://www.solarwinds.com/downloads/. The TFTP server is free. I do not know whether or not it allows control over the MTU size.

4. More information on IP fragmentation can be found in http://stack.nil.si/ipcorner/IP_Fragmentation/.


I hope that this information is helpful.