All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tom Rini <trini@konsulko.com>
To: Jerome Forissier <jerome.forissier@linaro.org>
Cc: u-boot@lists.denx.de,
	Ilias Apalodimas <ilias.apalodimas@linaro.org>,
	Javier Tia <javier.tia@linaro.org>,
	Raymond Mao <raymond.mao@linaro.org>,
	Maxim Uvarov <muvarov@gmail.com>
Subject: Re: [PATCH v5 00/20] Introduce the lwIP network stack
Date: Thu, 25 Jul 2024 16:34:01 -0600	[thread overview]
Message-ID: <20240725223401.GD989285@bill-the-cat> (raw)
In-Reply-To: <20240725172220.GA989285@bill-the-cat>

[-- Attachment #1: Type: text/plain, Size: 26831 bytes --]

On Thu, Jul 25, 2024 at 11:22:20AM -0600, Tom Rini wrote:
> On Thu, Jul 25, 2024 at 02:57:21PM +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
> 
> This is better than v4, and on the hardware platforms I could build and
> boot on (which was most of mine except the am62x_beagleplay), the tests
> ran and completed, including the tftp+boot a Linux kernel.
> 
> The bad news is CI blows up, a lot:
> https://source.denx.de/u-boot/u-boot/-/pipelines/21764
> And:
> https://dev.azure.com/u-boot/a1096300-2999-4ec4-a21a-4c22075e3771/_apis/build/builds/9014/logs/106
> which is another Kconfig dependency problem. I don't _think_ I
> introduced that, but since this wasn't against top of tree, I had to
> apply the cmd/Kconfig patch manually.
> 
> I have my world build running still and may have more comments based on
> that.

First, with NET_LWIP being default rather than NET, there's a lot of
other Kconfig dependency issues. Unfortunately I don't see an easy tool
for making sure this is all clean aside from a shell loop like:
for C in `(cd configs;ls)`;do make -s $C;done

Once those are fixed, this is feeling pretty OK I think. I assume PXE
support is high on the follow-up TODO list? That said, after taking
tiger-rk3588 as an example platform and hacking out PXE related stuff and
turning on lwIP:
   aarch64: (for 1/1 boards) all +10144.0 bss -4040.0 data -64.0 rodata -100.0 text +14348.0
            tiger-rk3588   : all +10144 bss -4040 data -64 rodata -100 text +14348
               u-boot: add: 161/-115, grow: 8/-6 bytes: 24552/-14382 (10170)
                 function                                   old     new   delta
                 dhcp_recv                                    -    1296   +1296
                 tftp_recv                                    -    1152   +1152
                 ip4_input                                    -     596    +596
                 new_netif                                    -     556    +556
                 etharp_query                                 -     552    +552
                 udp_input                                    -     540    +540
                 etharp_input                                 -     532    +532
                 distro_efi_read_bootflow_net                 -     516    +516
                 dhcp_loop                                    -     512    +512
                 ip4addr_aton                                 -     492    +492
                 static.dhcp_select                           -     484    +484
                 ip4_output_if_src                            -     436    +436
                 udp_sendto_if_src                            -     408    +408
                 static.dhcp_reboot                           -     400    +400
                 etharp_output                                -     400    +400
                 dhcp_create_msg                              -     384    +384
                 etharp_find_entry                            -     376    +376
                 dhcp_bind                                    -     364    +364
                 send_request                                 -     352    +352
                 dhcp_discover                                -     352    +352
                 raw_sendto_if_src                            -     328    +328
                 pbuf_copy_partial_pbuf                       -     328    +328
                 netif_add                                    -     324    +324
                 do_tftpb                                   544     868    +324
                 pbuf_alloc                                   -     308    +308
                 dhcp_release_and_stop                        -     308    +308
                 net_lwip_rx                                  -     292    +292
                 raw_input                                    -     288    +288
                 udp_bind                                     -     284    +284
                 ethernet_input                               -     284    +284
                 etharp_raw                                   -     284    +284
                 static.dhcp_handle_ack                       -     272    +272
                 ping_send                                    -     248    +248
                 ip4addr_ntoa_r                               -     220    +220
                 inet_chksum_pseudo                           -     216    +216
                 ping_recv                                    -     212    +212
                 etharp_output_to_arp_index                   -     208    +208
                 netif_set_addr                               -     204    +204
                 do_ping                                    124     328    +204
                 dhcp_start                                   -     204    +204
                 send_data                                    -     192    +192
                 dhcp_fine_tmr                                -     192    +192
                 pbuf_copy_partial                            -     184    +184
                 tftp_close                                   -     176    +176
                 script_read_bootflow                       420     596    +176
                 linkoutput                                   -     176    +176
                 ethernet_output                              -     176    +176
                 tftp_write                                   -     172    +172
                 pbuf_memcmp                                  -     168    +168
                 static.send_error                            -     164    +164
                 netif_remove                                 -     164    +164
                 raw_sendto                                   -     160    +160
                 arp_table                                    -     160    +160
                 tftp_init_common                             -     156    +156
                 pbuf_realloc                                 -     152    +152
                 dhcp_inc_pcb_refcount                        -     152    +152
                 tftp_tmr                                     -     148    +148
                 pbuf_free                                    -     148    +148
                 udp_sendto                                   -     144    +144
                 udp_connect                                  -     144    +144
                 sys_timeout_abs                              -     140    +140
                 ip4_route                                    -     136    +136
                 static.resend_data                           -     132    +132
                 pbuf_memfind                                 -     128    +128
                 pbuf_add_header_impl                         -     128    +128
                 boot_file_name                               -     128    +128
                 static.netif_do_set_ipaddr                   -     124    +124
                 lwip_standard_chksum                         -     124    +124
                 sys_check_timeouts                           -     120    +120
                 tftp_error                                   -     116    +116
                 etharp_free_entry                            -     116    +116
                 tftp_get                                     -     112    +112
                 dhcp_run                                     -     112    +112
                 static.send_ack                              -     108    +108
                 eth_start_udev                               -     104    +104
                 close_handle                                 -      96     +96
                 sys_untimeout                                -      92     +92
                 ip4_addr_isbroadcast_u32                     -      92     +92
                 init_packet                                  -      92     +92
                 etharp_cleanup_netif                         -      92     +92
                 raw_new                                      -      88     +88
                 pbuf_remove_header                           -      88     +88
                 net_lwip_get_netif                           -      88     +88
                 dhcp_option_trailer                          -      88     +88
                 udp_sendto_if                                -      84     +84
                 pbuf_alloc_reference                         -      84     +84
                 udp_remove                                   -      80     +80
                 ip4_input_accept                             -      80     +80
                 netif_set_link_up                            -      76     +76
                 udp_netif_ip_addr_changed                    -      72     +72
                 raw_remove                                   -      72     +72
                 raw_netif_ip_addr_changed                    -      72     +72
                 dhcp_option_long                             -      68     +68
                 dhcp_dec_pcb_refcount                        -      68     +68
                 udp_new                                      -      64     +64
                 sys_timeout                                  -      60     +60
                 pbuf_try_get_at                              -      60     +60
                 pbuf_clone                                   -      60     +60
                 dhcp_network_changed_link_up                 -      60     +60
                 tftp_cleanup                                 -      56     +56
                 pbuf_cat                                     -      56     +56
                 netif_get_by_index                           -      56     +56
                 _u_boot_list_2_cmd_2_dhcp                    -      56     +56
                 tftp_state                                   4      56     +52
                 pbuf_skip_const                              -      48     +48
                 net_lwip_if_init                             -      48     +48
                 dhcp_supplied_address                        -      48     +48
                 netif_issue_reports                          -      44     +44
                 tftp_context                                 -      40     +40
                 ip_data                                      -      40     +40
                 etharp_request                               -      40     +40
                 raw_bind                                     -      36     +36
                 net_lwip_remove_netif                        -      36     +36
                 memp_malloc                                  -      36     +36
                 ip4_output_if                                -      36     +36
                 dhcp_option_short                            -      36     +36
                 call_lwip_dhcp_fine_tmr                      -      36     +36
                 netif_set_up                                 -      32     +32
                 netif_set_down                               -      32     +32
                 inet_chksum                                  -      32     +32
                 dhcp_set_state                               -      32     +32
                 dhcp_rx_options_val                          -      32     +32
                 pbuf_get_at                                  -      28     +28
                 distro_efi_read_bootflow                    60      88     +28
                 distro_efi_boot                            360     388     +28
                 tftp_client_set_blksize                      -      24     +24
                 sys_now                                      -      24     +24
                 pbuf_copy                                    -      24     +24
                 pbuf_chain                                   -      24     +24
                 memp_free                                    -      24     +24
                 eth_bootdev_hunt                            44      68     +24
                 do_dhcp                                      -      24     +24
                 pbuf_ref                                     -      20     +20
                 netif_input                                  -      20     +20
                 do_net_stats                               328     348     +20
                 static.str                                   -      16     +16
                 ip4addr_ntoa                                 -      16     +16
                 udp_recv                                     -      12     +12
                 tftp_init_client                             -      12     +12
                 netif_set_default                            -      12     +12
                 udp_pcbs                                     -       8      +8
                 tftp_read                                    -       8      +8
                 tftp_open                                    -       8      +8
                 raw_recv                                     -       8      +8
                 raw_pcbs                                     -       8      +8
                 pbuf_add_header                              -       8      +8
                 next_timeout                                 -       8      +8
                 netif_null_output_ip4                        -       8      +8
                 netif_list                                   -       8      +8
                 netif_default                                -       8      +8
                 net_lwip_new_netif_noip                      -       8      +8
                 net_lwip_new_netif                           -       8      +8
                 lwip_htons                                   -       8      +8
                 lwip_htonl                                   -       8      +8
                 dhcp_rx_options_given                        -       8      +8
                 dhcp_pcb                                     -       8      +8
                 udp_new_ip_type                              -       4      +4
                 static.xid                                   -       4      +4
                 mem_trim                                     -       4      +4
                 mem_malloc                                   -       4      +4
                 mem_free                                     -       4      +4
                 ip_chksum_pseudo                             -       4      +4
                 current_timeout_due_time                     -       4      +4
                 udp_port                                     -       2      +2
                 ip_id                                        -       2      +2
                 static.called                                -       1      +1
                 netif_num                                    -       1      +1
                 etharp_cached_entry                          -       1      +1
                 dhcp_pcb_refcount                            -       1      +1
                 net_boot_file_name_explicit                  1       -      -1
                 tftp_windowsize                              2       -      -2
                 tftp_window_size_option                      2       -      -2
                 tftp_next_ack                                2       -      -2
                 tftp_last_nack                               2       -      -2
                 tftp_block_size_option                       2       -      -2
                 tftp_block_size                              2       -      -2
                 ping_seq_number                              2       -      -2
                 net_our_vlan                                 2       -      -2
                 net_native_vlan                              2       -      -2
                 env_flags_vartype_rep                        7       5      -2
                 timeout_count_max                            4       -      -4
                 timeout_count                                4       -      -4
                 tftp_timeout_count_max                       4       -      -4
                 tftp_remote_port                             4       -      -4
                 tftp_remote_ip                               4       -      -4
                 tftp_our_port                                4       -      -4
                 static.first_call                            4       -      -4
                 saved_tftp_block_size_option                 4       -      -4
                 net_try_count                                4       -      -4
                 net_state                                    4       -      -4
                 net_server_ip                                4       -      -4
                 net_rx_packet_len                            4       -      -4
                 net_restarted                                4       -      -4
                 net_ping_ip                                  4       -      -4
                 net_netmask                                  4       -      -4
                 net_ip_id                                    4       -      -4
                 net_ip                                       4       -      -4
                 net_gateway                                  4       -      -4
                 net_dns_server                               4       -      -4
                 net_dev_exists                               4       -      -4
                 net_boot_file_size                           4       -      -4
                 net_boot_file_expected_size_in_blocks        4       -      -4
                 net_arp_wait_reply_ip                        4       -      -4
                 net_arp_wait_packet_ip                       4       -      -4
                 dummy_handler                                4       -      -4
                 arp_wait_tx_packet_size                      4       -      -4
                 arp_wait_try                                 4       -      -4
                 net_server_ethaddr                           6       -      -6
                 net_ethaddr                                  6       -      -6
                 udp_packet_handler                           8       -      -8
                 timeout_ms                                   8       -      -8
                 time_handler                                 8       -      -8
                 time_delta                                   8       -      -8
                 tftp_prev_block                              8       -      -8
                 tftp_load_size                               8       -      -8
                 tftp_load_addr                               8       -      -8
                 tftp_cur_block                               8       -      -8
                 tftp_block_wrap_offset                       8       -      -8
                 tftp_block_wrap                              8       -      -8
                 net_tx_packet                                8       -      -8
                 net_rx_packet                                8       -      -8
                 arp_wait_timer_start                         8       -      -8
                 arp_wait_packet_ethaddr                      8       -      -8
                 arp_tx_packet                                8       -      -8
                 arp_packet_handler                           8       -      -8
                 net_get_arp_handler                         12       -     -12
                 default_filename                            13       -     -13
                 time_start                                  16       -     -16
                 start_again_timeout_handler                 16       -     -16
                 _u_boot_list_2_env_clbk_2_vlan              16       -     -16
                 _u_boot_list_2_env_clbk_2_serverip          16       -     -16
                 _u_boot_list_2_env_clbk_2_nvlan             16       -     -16
                 _u_boot_list_2_env_clbk_2_netmask           16       -     -16
                 _u_boot_list_2_env_clbk_2_ipaddr            16       -     -16
                 _u_boot_list_2_env_clbk_2_gatewayip         16       -     -16
                 arp_is_waiting                              20       -     -20
                 net_set_udp_handler                         24       -     -24
                 ip_checksum_ok                              28       -     -28
                 ping_timeout_handler                        32       -     -32
                 net_clear_handlers                          36       -     -36
                 ip_to_string                                36       -     -36
                 is_serverip_in_cmd                          40       -     -40
                 net_send_udp_packet                         44       -     -44
                 net_get_async_tx_pkt_buf                    44       -     -44
                 eth_halt_state_only                         44       -     -44
                 on_vlan                                     48       -     -48
                 on_serverip                                 48       -     -48
                 on_nvlan                                    48       -     -48
                 on_netmask                                  48       -     -48
                 on_ipaddr                                   48       -     -48
                 on_gatewayip                                48       -     -48
                 net_eth_hdr_size                            56       -     -56
                 arp_init                                    56       -     -56
                 net_init_loop                               60       -     -60
                 eth_init                                   300     232     -68
                 env_flags_validate                         644     576     -68
                 copy_filename                               76       -     -76
                 net_init                                   112      32     -80
                 string_to_vlan                              84       -     -84
                 net_set_timeout_handler                     84       -     -84
                 compute_ip_checksum                         92       -     -92
                 tftp_init_load_addr                        100       -    -100
                 skip_num                                   104       -    -104
                 tftp_filename                              128       -    -128
                 arp_request                                128       -    -128
                 tftp_timeout_handler                       132       -    -132
                 lmb_get_free_size                          136       -    -136
                 net_set_udp_header                         144       -    -144
                 arp_timeout_check                          148       -    -148
                 net_update_ether                           152       -    -152
                 eth_validate_ethaddr_str                   152       -    -152
                 string_to_ip                               156       -    -156
                 net_parse_bootfile                         160       -    -160
                 net_set_ether                              180       -    -180
                 net_set_ip_header                          184       -    -184
                 arp_raw_request                            228       -    -228
                 ping_start                                 276       -    -276
                 net_send_ip_packet                         292       -    -292
                 net_check_prereq                           308       -    -308
                 ping_receive                               332       -    -332
                 net_start_again                            336       -    -336
                 net_loop                                   544       -    -544
                 arp_receive                                560       -    -560
                 tftp_send                                  584       -    -584
                 net_process_received_packet                764       4    -760
                 tftp_start                                 908       -    -908
                 net_boot_file_name                        1024       -   -1024
                 tftp_handler                              1308       -   -1308
                 net_pkt_buf                               7744    6208   -1536
                 arp_tx_packet_buf                         1600       -   -1600

Although I'm not 100% sure that config is functionally equivalent, so
perhaps it would be helpful if you could take a board or two and
reconfigure them with the legacy stack, but equivalent functionality to
with lwIP, for comparison sake? Thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

  reply	other threads:[~2024-07-25 22:34 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-25 12:57 [PATCH v5 00/20] Introduce the lwIP network stack Jerome Forissier
2024-07-25 12:57 ` [PATCH v5 01/20] flash: prefix error codes with FL_ Jerome Forissier
2024-07-25 18:18   ` Tom Rini
2024-07-26  8:51     ` Jerome Forissier
2024-07-25 12:57 ` [PATCH v5 02/20] net: introduce alternative implementation as net-lwip/ Jerome Forissier
2024-07-25 13:46   ` Maxim Uvarov
2024-07-25 16:17   ` Tom Rini
2024-07-26 12:08     ` Jerome Forissier
2024-07-26  8:44   ` Michal Simek
2024-07-26 12:39     ` Jerome Forissier
2024-07-25 12:57 ` [PATCH v5 03/20] configs: replace '# CONFIG_NET is not set' with CONFIG_NO_NET=y Jerome Forissier
2024-08-07 13:58   ` Felix Brack
2024-07-25 12:57 ` [PATCH v5 04/20] net: fec_mxc_init(): do not ignore return status of fec_open() Jerome Forissier
2024-07-25 12:57 ` [PATCH v5 05/20] net: split include/net.h into net{, -common, -legacy, -lwip}.h Jerome Forissier
2024-07-25 12:57 ` [PATCH v5 06/20] net: eth-uclass: add function eth_start_udev() Jerome Forissier
2024-07-25 18:27   ` Tom Rini
2024-07-26  8:38     ` Jerome Forissier
2024-07-25 12:57 ` [PATCH v5 07/20] net-lwip: build lwIP Jerome Forissier
2024-07-25 12:57 ` [PATCH v5 08/20] net-lwip: add DHCP support and dhcp commmand Jerome Forissier
2024-07-25 12:57 ` [PATCH v5 09/20] net-lwip: add TFTP support and tftpboot command Jerome Forissier
2024-07-25 12:57 ` [PATCH v5 10/20] net-lwip: add ping command Jerome Forissier
2024-07-25 12:57 ` [PATCH v5 11/20] net-lwip: add dns command Jerome Forissier
2024-07-25 12:57 ` [PATCH v5 12/20] net: split cmd/net.c into cmd/net.c and cmd/net-common.c Jerome Forissier
2024-07-29 12:41   ` Ilias Apalodimas
2024-07-25 12:57 ` [PATCH v5 13/20] net-lwip: add wget command Jerome Forissier
2024-07-25 12:57 ` [PATCH v5 14/20] net-lwip: lwIP wget supports user defined port in the uri, so allow it Jerome Forissier
2024-07-25 12:57 ` [PATCH v5 15/20] cmd: bdinfo: enable -e when CONFIG_CMD_NET_LWIP=y Jerome Forissier
2024-07-25 12:57 ` [PATCH v5 16/20] configs: add qemu_arm64_lwip_defconfig Jerome Forissier
2024-07-25 15:58   ` Tom Rini
2024-07-25 16:10     ` Jerome Forissier
2024-07-25 16:25       ` Tom Rini
2024-07-26 12:27         ` Jerome Forissier
2024-07-26 14:05           ` Tom Rini
2024-07-25 12:57 ` [PATCH v5 17/20] lwip: tftp: add support of blksize option to client Jerome Forissier
2024-07-25 12:57 ` [PATCH v5 18/20] net-lwip: add TFTP_BLOCKSIZE Jerome Forissier
2024-07-29 12:29   ` Ilias Apalodimas
2024-07-29 15:18     ` Jerome Forissier
2024-07-30  9:57       ` Ilias Apalodimas
2024-07-25 12:57 ` [PATCH v5 19/20] CI: add qemu_arm64_lwip to the test matrix Jerome Forissier
2024-07-25 12:57 ` [PATCH v5 20/20] MAINTAINERS: net-lwip: add myself as a maintainer Jerome Forissier
2024-07-25 13:03 ` [PATCH v5 00/20] Introduce the lwIP network stack Fabio Estevam
2024-07-25 17:22 ` Tom Rini
2024-07-25 22:34   ` Tom Rini [this message]
2024-08-01 14:40     ` Jerome Forissier
2024-08-01 14:43       ` Tom Rini
2024-08-01 15:15         ` Jerome Forissier
2024-08-01 15:21           ` Tom Rini
2024-08-02 20:16       ` Tom Rini
2024-08-07 15:06         ` Jerome Forissier
2024-07-30  9:48   ` Jerome Forissier
2024-07-30 14:02     ` Tom Rini
2024-07-30 14:23       ` Jerome Forissier
2024-08-07 18:54 ` Michael Nazzareno Trimarchi
2024-08-07 19:08   ` Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240725223401.GD989285@bill-the-cat \
    --to=trini@konsulko.com \
    --cc=ilias.apalodimas@linaro.org \
    --cc=javier.tia@linaro.org \
    --cc=jerome.forissier@linaro.org \
    --cc=muvarov@gmail.com \
    --cc=raymond.mao@linaro.org \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.