mbox series

[v6,00/12] net: tcp: improve tcp support

Message ID 20240909222720.2563118-1-mikhail.kshevetskiy@iopsys.eu
Headers show
Series net: tcp: improve tcp support | expand

Message

Mikhail Kshevetskiy Sept. 9, 2024, 10:27 p.m. UTC
U-Boot support of LWIP is not ready for a moment, but we already have
some kind of tcp support. Unfrotunately this support is really bad.

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 selectiv 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 generate bad tcp stream, test should fail but it passes instead

This series of patches fixes all of the above issuess.

The benefits:
 * A lot of bug was fixed
 * Better and more reliable TCP state machine
 * Tcp cliens becomes smaller/simpler
 * Data uploading was fixed (now it's possible to transmit a huge amount of
   data from the board to remote host)
 * Netcat over tcp was implemented. Netcat supports data downloading/uploading
   from/to remote host in client/server mode.
 * An example web-server implementation. This code can be used as a base
   for web-based firmware uploading used by some vendors.

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
 * codestyle fixes

Changes v5:
 * old patches were ocasionally sent with v4
 * add back web-server patches
 * fix bug in debug output
 * add more comments
 * codestyle fixes

Changes v6:
 * fix the wget test
 * improve description of "simplify tcp header filling code" patch

Mikhail Kshevetskiy (12):
  net/tcp: fix TCP options processing
  net/tcp: fix selective acknowledge
  net/tcp: put connection specific data into a tcp_stream structure
  net/tcp: add connection info to tcp_stream structure
  net/tcp: rename ack_edge and seq_init to more common rcv_nxt and irs
  net/tcp: improve tcp framework, use better state machine
  test/cmd/wget: fix the test
  net/tcp: simplify tcp header filling code
  net/tcp: define a fallback value for rcv_wnd size
  net/netcat: add netcat over tcp support
  net/httpd: add httpd common code
  net/httpd-upload: an example web-server implementation for file
    uploading

 arch/sandbox/include/asm/eth.h  |    4 +
 cmd/Kconfig                     |   21 +
 cmd/net.c                       |   54 +-
 include/net.h                   |    7 +-
 include/net/httpd-upload.h      |   12 +
 include/net/httpd.h             |   64 ++
 include/net/netcat.h            |   20 +
 include/net/tcp.h               |  235 +++++-
 include/net/wget.h              |    8 -
 net/Kconfig                     |   14 +
 net/Makefile                    |   21 +
 net/fastboot_tcp.c              |  190 ++---
 net/httpd-upload.c              |  123 +++
 net/httpd.c                     |  692 +++++++++++++++++
 net/httpd_upload/error_400.html |    9 +
 net/httpd_upload/error_404.html |   10 +
 net/httpd_upload/index.html     |   14 +
 net/httpd_upload/upload_ok.html |    7 +
 net/net.c                       |   36 +-
 net/netcat.c                    |  181 +++++
 net/tcp.c                       | 1259 ++++++++++++++++++++++---------
 net/wget.c                      |  479 ++++--------
 test/cmd/wget.c                 |   45 +-
 23 files changed, 2618 insertions(+), 887 deletions(-)
 create mode 100644 include/net/httpd-upload.h
 create mode 100644 include/net/httpd.h
 create mode 100644 include/net/netcat.h
 create mode 100644 net/httpd-upload.c
 create mode 100644 net/httpd.c
 create mode 100644 net/httpd_upload/error_400.html
 create mode 100644 net/httpd_upload/error_404.html
 create mode 100644 net/httpd_upload/index.html
 create mode 100644 net/httpd_upload/upload_ok.html
 create mode 100644 net/netcat.c