[PATCH 00/10] net: share the lwIP runtime and support netconsole

James Hilliard <[email protected]>
Newsgroups org.u-boot-project.lists.u-boot
Message-ID <20260825-submit-lwip-runtime-netconsole-v1-v1-0-0892966aa758@gmail.com>
lwIP commands currently create and remove the stack's only network
interface for each operation. That model cannot support a persistent
client: starting another command replaces its interface, and either
client can stop Ethernet while the other still owns callbacks and PCBs.

First correct wget's existing receive-error path to return ERR_ABRT after
it aborts and frees the TCP PCB.

Introduce a reference-counted runtime which owns one Ethernet device and
one lwIP netif. Clients retain their own protocol callbacks and PCBs,
while one non-reentrant poll entry point services timers, scheduled work
and every attached client. An address-less DHCP attachment temporarily
owns the IPv4 configuration; environment addressing is restored when it
detaches.

Migrate the existing lwIP commands to the runtime, then add an lwIP
netconsole transport. Netconsole remains attached while a foreground
network command runs, and that command's polling services both protocols.

The runtime permits independent lwIP clients to attach their protocol
state and share the poll loop without creating another netif or Ethernet
owner.

Sharing the stack makes asynchronous teardown significant. Add DNS
callback cancellation, HTTP client abort and DHCP stop-without-release
operations so clients can detach without leaving callbacks or protocol
state behind. The corresponding vendored lwIP changes are kept as
separate patches for upstream submission.

Validation included:

  - sandbox W=1 builds and DM tests for runtime ownership, multiple UDP
    PCBs, address handoff, callback cancellation, immediate abort of an
    established HTTP connection, nested polling and netconsole
    input/output;
  - no-DNS, sandbox_spl, sandbox64_lwIP, qemu_arm64_lwIP and legacy-stack
    builds; and
  - H616 hardware tests of bidirectional netconsole, a TFTP download while
    netconsole remained active, TFTP upload and HTTP wget, with matching
    payload checksums and successful network use after netconsole detached.

Assisted-by: Codex:gpt-5.6-sol
Signed-off-by: James Hilliard <[email protected]>
---
checkpatch reports expected diagnostics for patches 5-7 because vendored
lwIP code follows upstream lwIP formatting. It also reports generic
MAINTAINERS prompts for files already covered by drivers/net/ and test/dm/,
and preprocessor guards required when optional APIs are not declared.

To: Jerome Forissier <[email protected]>
To: Sughosh Ganu <[email protected]>
To: [email protected]
Cc: Tom Rini <[email protected]>
Cc: David Lechner <[email protected]>
Cc: Heinrich Schuchardt <[email protected]>
Cc: James Hilliard <[email protected]>
Cc: Julien Stephan <[email protected]>
Cc: Naveen Kumar Chaudhary <[email protected]>
Cc: Luca Jones <[email protected]>
Cc: Weijie Gao <[email protected]>
Cc: Pranav Tilak <[email protected]>
Cc: Simon Glass <[email protected]>
Cc: Vincent Jardin <[email protected]>
Cc: Quentin Schulz <[email protected]>
Cc: "Lucien.Jheng" <[email protected]>

---
James Hilliard (10):
      net: lwip: return ERR_ABRT after aborting wget receive
      net: split netconsole transport from stdio frontend
      net: netconsole: use unsigned port numbers
      net: netconsole: cache environment settings
      net: lwip: allow DNS callbacks to be canceled
      net: lwip: add an HTTP client abort operation
      net: lwip: allow DHCP to stop without releasing its lease
      net: lwip: share one network runtime between clients
      test: dm: cover the shared lwIP runtime
      net: netconsole: add an lwIP transport

 cmd/lwip/ping.c                                   |  41 +--
 cmd/lwip/sntp.c                                   |  19 +-
 drivers/net/Makefile                              |   6 +-
 drivers/net/netconsole-legacy.c                   | 156 ++++++++++
 drivers/net/netconsole-lwip.c                     | 200 ++++++++++++
 drivers/net/netconsole.c                          | 201 +++---------
 drivers/net/netconsole.h                          |  29 ++
 include/net-lwip.h                                |  42 ++-
 lib/lwip/lwip/src/apps/http/http_client.c         |  71 ++++-
 lib/lwip/lwip/src/apps/sntp/sntp.c                |   3 +
 lib/lwip/lwip/src/core/dns.c                      |  26 ++
 lib/lwip/lwip/src/core/ipv4/dhcp.c                |  39 ++-
 lib/lwip/lwip/src/include/lwip/apps/http_client.h |   1 +
 lib/lwip/lwip/src/include/lwip/dhcp.h             |   1 +
 lib/lwip/lwip/src/include/lwip/dns.h              |   1 +
 net/Kconfig                                       |  13 +-
 net/lwip/dhcp.c                                   |  57 ++--
 net/lwip/dns.c                                    |  24 +-
 net/lwip/net-lwip.c                               | 248 ++++++++++++---
 net/lwip/nfs.c                                    |  25 +-
 net/lwip/tftp.c                                   |  54 ++--
 net/lwip/wget.c                                   |  72 +++--
 test/dm/Makefile                                  |   6 +
 test/dm/lwip.c                                    | 353 ++++++++++++++++++++++
 test/dm/netconsole.c                              | 343 +++++++++++++++++++++
 25 files changed, 1646 insertions(+), 385 deletions(-)
---
base-commit: 964ad5b5c91b7be56e443e899d7f873e6aa8c9fc
change-id: 20260825-submit-lwip-runtime-netconsole-v1-9c08ed87e0fe

Best regards,
--  
James Hilliard <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.