Skip to content

A cross-platform tftp client + server written in Rust, trying to be fast and low-footprint

Notifications You must be signed in to change notification settings

jonasjelonek/tftp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tftp

A cross-platform tftp server + client written in Rust, trying to be fast and low-footprint.

Fast and low-footprint

I haven't run any benchmark or similar things to really prove my Tftp app is fast and has an extremely low footprint. But I've put serious thoughts into this and try to achieve that goal by several measures. For example, the structs abstracting the Tftp packet types are mostly used zero-copy, i.e. the buffer that is used for reading from socket/file is then directly used by the packet types without any copying/allocation. In general, allocating is kept to a minimum.

Of course, this all is limited by my current knowledge of Rust. This project is intended to extend my Rust knowledge, improve my coding and become familiar with TFTP, a quite important protocol when working with embedded devices.

If you think there is room for improvement, please open an issue or a pull request.

Disclaimer

This currently needs Rust nightly compiler since I implemented some things with the help of currently non-stabilized features.

Supported TFTP features

  • Server mode
    • RRQ/GET
    • WRQ/PUT
  • Client mode
    • RRQ/GET
    • WRQ/PUT
  • TFTP options
    • Blocksize
    • Timeout
    • Transfer size
    • Window size

It supports parallel operation with a arbitrary number of peers.

Supported RFCs

  • RFC 1350 - TFTP protocol
  • RFC 2347 - TFTP option extension
  • RFC 2348 - TFTP blocksize option
  • RFC 2349 - TFTP timeout and transfer size options
  • RFC 7440 - TFTP windowsize option

Big TODOs

  • remove need for nightly toolchain
  • get rid of all the unwraps - they are bad style but good during development
  • improve general output, especially for debugging

About

A cross-platform tftp client + server written in Rust, trying to be fast and low-footprint

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages