iPXE - Open Source Boot Firmware

[tftp] Make TFTP size requests abort transfer with an error
authorThomas Horsten <thomas@horsten.com>
Thu, 7 Jan 2010 17:02:13 +0000 (17:02 +0000)
committerMarty Connor <mdc@etherboot.org>
Mon, 18 Jan 2010 00:18:28 +0000 (19:18 -0500)
commitc124f6360dea456d73acb911e12df6e2c26937c1
tree8911ed26e69a63d1de96e592b424fec1d79babe8
parentb7fc45c97502cb07083d4221fa714f9ab34d9b7a
[tftp] Make TFTP size requests abort transfer with an error

pxenv_tftp_get_fsize is an API call that PXE clients can call to
obtain the size of a remote file. It is implemented by starting a TFTP
transfer with pxe_tftp_open, waiting for the response and then
stopping the transfer with pxe_tftp_close(). This leaves the session
hanging on the TFTP server and it will try to resend the packet
repeatedly (verified with tftpd-hpa) until it times out.

This patch adds a method "tftpsize" that will abort the transfer after
the first packet is received from the server. This will terminate the
session on the server and is the same behaviour as Intel's PXE ROM
exhibits.

Together with a qemu patch to handle the ERROR packet (submitted to
qemu's mailing list), this resolves a specific issue where booting
pxegrub with qemu's TFTP server would be slow or hang.

I've tested this against qemu's tftp server and against my normal boot
infrastructure (tftpd-hpa). Booting pxegrub and loading extra files
now produces a trace similar to Intel's PXE client and there are no
spurious retransmits from tftpd any more.

Signed-off-by: Thomas Horsten <thomas@horsten.com>
Signed-off-by: Milan Plzik <milan.plzik@gmail.com>
Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Marty Connor <mdc@etherboot.org>
src/arch/i386/interface/pxe/pxe_tftp.c
src/net/udp/tftp.c