On Wed, Dec 04, 2024 at 02:00:39AM +0300, Mikhail Kshevetskiy wrote: > Legacy TCP stack is bad. Here are some of the known issues: > * tcp packet from other connection can break a current one > * tcp send sequence always starts from zero > * bad tcp options processing > * strange assumptions on packet size for selective acknowledge > * tcp interface assumes one of the two scenarios: > - data downloading from remote host to a board > - request-response exchange with a small packets > so it's not possible to upload large amount of data from the > board to remote host. > * wget test generate bad tcp stream, test should fail but it passes instead > > This series of patches fixes all of the above issues. > > The benefits: > * A lot of bug was fixed > * Better and more reliable TCP state machine > * Tcp clients becomes smaller/simpler > * Data uploading was fixed (now it's possible to transmit a huge amount of > data from the board to remote host) > > Modification was verified with > * firmware downloading via u-boot wget command > * fastboot over tcp > * netcat linux client > * Firefox/Chrome/Edge using example web-server implementation > > Changes v2: > * cover letter was added > * some patches were removed > > Changes v3: > * better cover letter > > Changes v4: > * fix bug in debug output > * add more comments > * code style fixes > > Changes v5: > * old patches were occasionally sent with v4 > * add back web-server patches > * fix bug in debug output > * add more comments > * code style fixes > > Changes v6: > * fix the wget test > * improve description of "simplify tcp header filling code" patch > > Changes v7: > * fix include ordering > * improve option descriptions > * fix a lot of extra brackets and comparisons against NULL / 0 > * add empty lines before final returns > * fixed a bug with zero size httpd uploads > > Changes v8: > * [tcp] add function to restart rx inactivity timeout. This may help > in the cases where remote peer waits for u-boot data, but u-boot > is busy with long executing action > * [httpd] add function returning underlying tcp stream from request id. > This (with the above change) allows avoid connection break > for the long processing post requests. > > Changes v9: > * rebase all changes on top of origin/next > * update test/cmd/wget patch description (bad tcp ack/seq issue was already > fixed in origin/next) > * tcp: add rx/tx packet counters to a tcp_stream structure > * wget: use tcp rx packet counter instead of own one > * netcat: use tcp rx/tx packet counters instead of own one > > Changes v10: > * netcat: fix bug appeared after rx/tx packet counter addition > * rebased on top of v2024.10 > > Changes v11: > * fix spelling in cover letter > > Changes v12: > * rebase on top of master branch (3df6145db0e) > * slightly change tcp->rx() & tcp->tx() callback declarations, this > allow us to terminate a connection if something goes wrong in rx/tx paths. > * set net_boot_file_size variable in httpd_upload > * set filesize env variable to a proper value netcat and httpd_upload > > Changes v13: > * rebase on top of master branch (8573ea41058) > * remove netcat support > * remove example httpd server implementation > > Changes v14: > * fix issues found by github CI
Sorry, I waited too long applying this to -next. There were a few merge problems. I got as far as CI *almost* passing, when also applying https://patchwork.ozlabs.org/project/uboot/list/?series=435653&state=* to fix "bootefi hello" tests. But I could not get lib/efi_selftest/efi_selftest_http.c to pass still: https://source.denx.de/u-boot/u-boot/-/jobs/972270#L360 Can you rebase one last time please? I'll apply it to next once it's posted so we don't have to do this again, thanks. -- Tom
signature.asc
Description: PGP signature

