On Fri, Nov 06, 2026 at 08:10:06PM +0100, Jerome Forissier wrote:
> Hi E,
> 
> On 06/11/2026 19:40, E Shattow wrote:
> > Hi Jerome,
> > 
> > On 11/6/26 10:07, Jerome Forissier wrote:
> >>> wget can write a disk image only after the whole file is in RAM. This
> >>> series lets lwIP wget write the download to a block device while it
> >>> arrives:
> >>>
> >>>   => wget -o mmc 1 -b 400000 http://192.168.1.65/armbian.img
> >>>
> >>> The target is a whole device, a hardware partition, a partition by
> >>> number or name, and an optional byte offset into it.
> >>>
> >>> Patch 1 fixes the buffer size check for a reply without Content-Length;
> >>> patch 4 sets that check to the target size, and without the fix such a
> >>> reply would be refused. Patch 2 lets a wget client take the data
> >>> through a callback, patch 3 adds the block device writer, and patch 4
> >>> adds the options to the command.
> >>>
> >>> Tested:
> >>> - ROCK Pi 4A: a 1862270976-byte image to the SD card in 3 min 16 s to
> >>>   3 min 35 s with a 4 MiB buffer; the first 1862270976 bytes of the
> >>>   card have the sha256 of the image, and the card boots. A
> >>>   2936012800-byte image, past the Content-Length limit below, took
> >>>   4 min 18 s and checks and boots the same way.
> >>> - QEMU arm64, virtio-blk: a 404 writes nothing; a file larger than the
> >>>   target is refused before any write with Content-Length, and at the
> >>>   end of the target without it.
> >>> - sandbox: ut lib lib_test_sink_blk; every patch builds on sandbox and
> >>>   sandbox64_lwip.
> >>>
> >>> Notes:
> >>> - lwIP's http_client.c reads Content-Length through an int, so from
> >>>   2 GiB on the length is unknown and a file that does not fit fails
> >>>   only at the end of the target.
> >>> - EFI HTTP, the other user of check_buffer_size, retries with the
> >>>   reported length when it exceeds the buffer (efi_net.c:1715), so a
> >>>   reply without Content-Length still ends in a 4 GiB allocation there;
> >>>   patch 1 does not change that.
> >>> - checkpatch asks for IS_ENABLED() at "#if defined(CONFIG_WGET_STREAM)"
> >>>   in cmd/lwip/wget.c; that #if picks lines of the help string, as the
> >>>   WGET_CACERT ones next to it do.
> >>>
> >>> gzip and zstd input follow in a separate series on top of this one.
> >>>
> >>> Signed-off-by: Igor Velkov <[email protected]>
> >>> ---
> >>> Igor Velkov (4):
> >>>       net: lwip: wget: accept a reply without Content-Length in the size 
> >>> check
> >>>       net: lwip: wget: hand the payload to an optional sink
> >>>       lib: add a stream sink for block devices
> >>>       cmd: lwip: wget: write the download to a block device
> >>>
> >>>  cmd/Kconfig                      |   9 ++
> >>>  cmd/lwip/wget.c                  | 107 +++++++++++++++++++++-
> >>>  configs/sandbox64_lwip_defconfig |   1 +
> >>>  configs/sandbox_defconfig        |   1 +
> >>>  doc/usage/cmd/wget.rst           |  43 ++++++++-
> >>>  include/net-common.h             |   6 ++
> >>>  include/stream_sink.h            |  75 ++++++++++++++++
> >>>  lib/Kconfig                      |   8 ++
> >>>  lib/Makefile                     |   1 +
> >>>  lib/stream_sink.c                | 189 
> >>> +++++++++++++++++++++++++++++++++++++++
> >>>  net/lwip/wget.c                  |  89 +++++++++++++++---
> >>>  test/lib/Makefile                |   3 +
> >>>  test/lib/stream_sink.c           | 137 ++++++++++++++++++++++++++++
> >>>  13 files changed, 655 insertions(+), 14 deletions(-)
> >>> ---
> >>> base-commit: 3401e006432abcbf7d73d7210f10df157f990ed3
> >>> change-id: 20261101-b4-wget-blk-r4-833f8a3d344e
> >>>
> >>> Best regards,
> >>
> >> Applied to u-boot-net branch for-main [1], thanks!
> >>
> >> [1] 
> >> https://git.u-boot-project.org/u-boot/custodians/u-boot-net/-/commits/for-main
> >>
> >> [1/4] net: lwip: wget: accept a reply without Content-Length in the size 
> >> check
> >>       commit: 8498fbf8788eff07bc7fc59f9b15cf6c65025b10
> >>
> >> [2/4] net: lwip: wget: hand the payload to an optional sink
> >>       commit: 40611fe0277a7a8f9639aab02a6f1a1e0e897d57
> >>
> >> [3/4] lib: add a stream sink for block devices
> >>       commit: fdf4d9621c8b507f69fe0dd09fc53ebfe860fda5
> >>
> >> [4/4] cmd: lwip: wget: write the download to a block device
> >>       commit: f0870bb385cf923bfab0baddacc952151efa4c39
> >>
> >> Best regards,
> > 
> > FYI stating my objection to making the wget command take these
> > arguments, it seems short sighted and not very U-Boot -like.
> 
> Well the way U-Boot deals with command arguments is not its major
> strength if you ask me. I think options are much easier to use than
> positional arguments and can simplify the implementation too.
> That being said...
> > The functionality itself I have no objection to but including this
> > command line argument complexity now for 'wget' implies that scripts and
> > documentation will be built around this change and then we must maintain
> > that compatibility, which is a bad design choice in my opinion.
> 
> ...I agree that compatibility is a must and that we should not
> introduce such a change lightly. Thanks for raising the point. Let's
> see what others think. I will drop this series if it is deemed unacceptable
> or if we simply need more time to discuss it.

Lets have some more discussion around it please. It's not fitting inside
the general 2 weeks on the list for discussion and I see Heinrich is
commenting on other parts right now.

-- 
Tom

Attachment: signature.asc
Description: PGP signature

Reply via email to