
On 8/5/24 20:20, Tom Rini wrote:
On Mon, Aug 05, 2024 at 08:18:09PM +0200, Jerome Forissier wrote:
On 8/2/24 20:32, Tom Rini wrote:
On Fri, Aug 02, 2024 at 06:26:27PM +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
On Pi 3 I'm again / still seeing: ========================================== FAILURES =========================================== ___________________________________ test_efi_helloworld_net ___________________________________ test/py/tests/test_efi_loader.py:163: in test_efi_helloworld_net assert expected_text in output E AssertionError: assert 'Hello, world' in 'No UEFI binary known at 200000' ------------------------------------ Captured stdout call ------------------------------------- U-Boot> tftpboot 200000 EFI/arm64/helloworld.efi Using smsc95xx_eth device TFTP from server 192.168.1.10; our IP address is 192.168.1.100 Filename 'EFI/arm64/helloworld.efi'. Load address: 0x200000 Loading: # 883.8 KiB/s done Bytes transferred = 4528 (11b0 hex) U-Boot> U-Boot> crc32 200000 $filesize crc32 for 00200000 ... 002011af ==> 2b466005 U-Boot> U-Boot> bootefi 200000 No UEFI binary known at 200000 U-Boot> =================================== short test summary info ===================================
On a configuration that works fine with the legacy network stack.
That was caused by a missing call to efi_set_bootdev() in tftp_loop() (net/lwip/tftp.c). Fixed in v8.
Thanks.
I also fixed a similar issue with wget (net/lwip/wget.c) but I noticed that the NET version of wget has the same issue:
U-Boot> wget 200000 192.168.0.30:helloworld.efi Waiting for Ethernet connection... done. HTTP/1.0 200 OK Packets received 13, Transfer Successful Bytes transferred = 12720 (31b0 hex) U-Boot> bootefi 200000 No UEFI binary known at 200000 U-Boot>
Should I also fix it in the same way? Or did I miss something? How are you supposed to boot an EFI image downloaded via wget?
A lack of tests for wget + EFI is how we got here, so thanks for finding the bug. For the sake of cleaner tests, can you please fix the legacy one as well, and add a test similar to the tftp one, but for wget?
wget test added to v8.
Thanks,