50 lines
2.1 KiB
Text
50 lines
2.1 KiB
Text
It all started when we got some new routers, which told me the
|
|
following when trying to upload configuration or download images
|
|
from it: The TFTP server doesn't support the blocksize option.
|
|
|
|
My curiousity was triggered, it took me some reading of RFCs and
|
|
other documentation to find out what was possible and what could
|
|
be done. Was plain TFTP very simple in its handshake, TFTP with
|
|
options was kind of messy because of its backwards capability: The
|
|
first packet returned could either be an acknowledgement of options,
|
|
or the first data packet.
|
|
|
|
Going through the source code of src/libexec/tftpd and going through
|
|
the code of src/usr.bin/tftp showed that there was a lot of duplicate
|
|
code, and the addition of options would only increase the amount
|
|
of duplicate code. After all, both the client and the server can
|
|
act as a sender and receiver.
|
|
|
|
At the end, it ended up with a nearly complete rewrite of the tftp
|
|
client and server. It has been tested against the following TFTP
|
|
clients and servers:
|
|
|
|
- Itself (yay!)
|
|
- The standard FreeBSD tftp client and server
|
|
- The Fedora Core 6 tftp client and server
|
|
- Cisco router tftp client
|
|
- Extreme Networks tftp client
|
|
|
|
It supports the following RFCs:
|
|
|
|
RFC1350 - THE TFTP PROTOCOL (REVISION 2)
|
|
RFC2347 - TFTP Option Extension
|
|
RFC2348 - TFTP Blocksize Option
|
|
RFC2349 - TFTP Timeout Interval and Transfer Size Options
|
|
RFC3617 - Uniform Resource Identifier (URI) Scheme and Applicability
|
|
Statement for the Trivial File Transfer Protocol (TFTP)
|
|
|
|
It supports the following unofficial TFTP Options as described at
|
|
http://www.compuphase.com/tftp.htm:
|
|
|
|
blksize2 - Block size restricted to powers of 2, excluding protocol headers
|
|
rollover - Block counter roll-over (roll back to zero or to one)
|
|
|
|
From the tftp program point of view the following things are changed:
|
|
|
|
- New commands: "blocksize", "blocksize2", "rollover" and "options"
|
|
- Development features: "debug" and "packetdrop"
|
|
|
|
If you try this tftp/tftpd implementation, please let me know if
|
|
it works (or doesn't work) and against which implementaion so I can
|
|
get a list of confirmed working systems.
|