[PATCH v8 00/23] Introduce the lwIP network stack

Jerome Forissier jerome.forissier at linaro.org
Fri Aug 16 18:21:24 CEST 2024



On 8/7/24 22:44, Tom Rini wrote:
> On Wed, Aug 07, 2024 at 07:11:44PM +0200, Jerome Forissier wrote:
> 
>> This is a rework of a patch series by Maxim Uvarov: "net/lwip: add lwip
>> library for the network stack" [1]. The goal is to introduce the lwIP TCP/IP
>> stack [2] [3] as an alternative to the current implementation in net/,
>> selectable with Kconfig, and ultimately keep only lwIP if possible. Some
>> reasons for doing so are:
>> - Make the support of HTTPS in the wget command easier. Javier T. and
>> Raymond M. (CC'd) have some additional lwIP and Mbed TLS patches to do
>> so. With that it becomes possible to fetch and launch a distro installer
>> such as Debian etc. using a secure, authenticated connection directly
>> from the U-Boot shell. Several use cases:
>>   * Authentication: prevent MITM attack (third party replacing the
>> binary with a different one)
>>   * Confidentiality: prevent third parties from grabbing a copy of the
>> image as it is being downloaded
>>   * Allow connection to servers that do not support plain HTTP anymore
>> (this is becoming more and more common on the Internet these days)
>> - Possibly benefit from additional features implemented in lwIP
>> - Less code to maintain in U-Boot
>>
>> Prior to applying this series, the lwIP stack needs to be added as a
>> Git subtree with the following command:
>>
>>  $  git subtree add --squash --prefix lib/lwip/lwip https://git.savannah.gnu.org/git/lwip.git STABLE-2_2_0_RELEASE
> 
> For v9, I think it would be good to do a CI run with NET_LWIP default
> and seeing what fails from that too. There's a few problems still
> leading to a lot of failures, in that case. Thanks.
>

See here: https://github.com/u-boot/u-boot/pull/635

I fixed a number of issues, see the commit descriptions. As for the
remaining ones:
- There is no http server in the CI so the wget test I added fails
- tftp is super slow in QEMU (~145 KiB/s) which causes timeouts. This is
for two reasons: (1) the tftp windowsize option is not supported in lwIP
(while the legacy NET does support it) so the sender waits for an ACK
before sending a new packet; and (2) the latency is very high due to
memcpy() being incredibly slow in QEMU (I am mainly referring to the
memcpy() call in tftp_write() in net/lwip/tftp.c). I measured ~20-60 ms
to copy a few hundred bytes (!) and if CONFIG_USE_ARCH_MEMCPY is enabled
it is slightly better but not much (~15 ms). Also it seems the QEMU
networking emulation is fragmenting the UDP packets because with
CONFIG_TFTP_BLOCKSIZE=1468 the tftp_write() function never receives
1468 bytes but only a few hundreds at a time (max 544 bytes).
- The r2dplus_* tests fail for reasons I don't understand.

Thanks,
-- 
Jerome


More information about the U-Boot mailing list