Description of problem: ** I could not find a duplicate bug. ** I was wondering if RFC7440 (TFTP Windowsize Option) will be supported as it offers performance improvements over RFC2348 (TFTP blocksize option). Image transfer time is quite slow but traditionally rom images are quite small. - With BIOS, pxelinux.0 is only circa 27K in size. - With uEFI, the images are getting bigger: shim.efi (1.3M), grubx86.efi (986K) There is no sign of TFTP becoming obsolete in cloud/IoT era. Version-Release number of selected component (if applicable): N/A How reproducible: N/A Steps to Reproduce: N/A Actual results: Slow PXE/TFTP transfer times for larger uEFI images. Expected results: Most likely we configure '--windowsize nnn' server argument on daemon. service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot --blocksize 1478 --windowsize nnnn disable = no per_source = 11 cps = 100 2 flags = IPv4 } I understand IPv6 has some efficiencies over IPv4 but I think the option would be required as IPv6 network boot becomes more established. service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot --blocksize 1478 --windowsize nnnn disable = no per_source = 11 cps = 100 2 flags = IPv6 } Additional info:
Looks like a valuable addition. I'll take a look at it.
There seems to be a misunderstanding in how the reporter understands the --blocksize (and subsequently the suggested --windowsize) addition. The --blocksize specifies the *maximum allowed* blocksize, should there be any request for the blocksize TFTP option (see RFC2348). The blocksize (or windowsize) option itself is always present in the initial read/write request packet. Therefore, no additional option will be added to the server parameters, but the server will be improved to also understand the windowsize TFTP option, as specified in RFC7440.
Created attachment 1144234 [details] patch-v1 Implement RFC7440 in both server and the client. This needs a lot of testing! Especially on error conditions and duplicate packets. Note that the client improvement was a bit forced, since it hadn't implemented any TFTP options before. It still uses the default TFTP blocksize of 512.
The patch was created against the current F24 (and rawhide, they are the same) code base.
I've created builds for F24 and F25 that can be downloaded from: https://jsynacek.fedorapeople.org/tftp/f24/ https://jsynacek.fedorapeople.org/tftp/f25/
Kudos for the fast analysis and turnaround. Unfortunately I not be able to test his (no time) but hopefully wider Fedora community will pick this up.
This package has changed maintainer in the Fedora. Reassigning to the new maintainer of this component.
If there's still interest in applying Jan's patch, let me know and I'll make a new build with the patch applied. The patch needs some revision, though. Here's a quick review: @@ -191,14 +192,14 @@ char *xstrdup(const char *); const char *program; -static inline void usage(int errcode) +static void usage(int errcode) { fprintf(stderr, #ifdef HAVE_IPV6 This looks unrelated, please explain why you're removing the inline attribute? + sa_set_port(&peeraddr, SOCKPORT(&from)); /* added */ The comment doesn't explain anything, either expand it or drop it, please. In multiple places, the only change is indentation. Please keep the original indentation in the functional patch and send a separate patch for whitespace-only changes.
Closing due to no interest from reporter or patch submitter. Feel free to reopen.