
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:
so it's not possible to upload large amount of data from the board to remote host.
- data downloading from remote host to a board
- request-response exchange with a small packets
- 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.