[PATHv11 00/43] net/lwip: add lwip library for the network stack

Maxim Uvarov maxim.uvarov at linaro.org
Tue Jan 2 18:30:47 CET 2024


Small update here. I made changes without any board limit size changes.
Reordered patches to make them compile in sequence. I think I will do one
more clean up and more testing,
and after that will be able to send an updated version.
Working tree is here: https://github.com/u-boot/u-boot/pull/434

SPL might have a very limited network stack (current code for tftp and
bootp). While later stage bootloader can have complete protocol (lwip).
That model fits all current boards limits.

'ethrotate' variable is more likely to go away and be replaced with routing
tables and command line arguments ('dhcp all', "ping -i eth0 IP" ).

However, I have a strange issue with mips malta. Work around:
https://github.com/u-boot/u-boot/pull/434/commits/14717056115944f67eeb22571330d551a1b1ecb7
Issue is that if LWIP_TCP=0 generated code for network stack is less on few
kilobytes. In that case
qemu is unable to start and does not even print hello messages. I followed
this documentation ./doc/board/emulation/qemu-mips.rst
for qemu run. While if image size is bigger and TCP for example compiled
then qemu boots and operates fine. For now
this issue is a little bit strange for me. And more strange how that
related to lwip code, because the network works on much later
stage then initial messages print.

Thanks,
Maxim.


On Tue, 19 Dec 2023 at 16:12, Alexander Dahl <ada at thorsis.com> wrote:

> Hello Maxim,
>
> Am Mon, Nov 27, 2023 at 06:56:43PM +0600 schrieb Maxim Uvarov:
> > Hello,
> >
> > Please find updated version of lwip patches. Changes are in the
> > changelog bellow.
> >
> > Thank you,
> > Maxim.
> >
> > changelog:
> >       v11: - v11 is mosly respin of v10 patches with CI error fixes.
> >                 Gitlab CI:
> >
> https://source.denx.de/u-boot/custodians/u-boot-tpm/-/pipelines/18368
> >                 Azure CI:
> >
> https://dev.azure.com/u-boot/u-boot/_build/results?buildId=7366&view=results
> >                 (Azure CI, which is connected to github. Sometime I can
> see
> >                  tftp timeout after some part of download there, but
> that can not be
> >                  reproduced locally. While Gitblab CI is stable. Because
> of num tries in
> >                  CI I suspect this CI was not always reliable.)
> >                 Azure and Gitlab also have different toolchains and I
> >                 would say Gitlab generates bigger code then Azure CI.
> >
> >                 Also many boards have a binary limit size of 800k (even
> >                 qemu has limits). And increased limits to fit all the
> code. Specially did it
> >                 patch by board config to show which boards are failing
> to build. There I have
> >                 a question if we really want to support new
> functionality for old boards (mips,
> >                 arm32 and etc...). I hope board owners can help me if
> >                 it's valid to increase these limits.
>
> In general one can not simply increase that limit without knowing
> details on where U-Boot binary is supposed to be stored on a
> particular board.  For example there are boards where U-Boot is stored
> on NAND flash with fixed sized (mtd) partitions.  Changing the
> partition layout on a running board is quite risky from my point of
> view, so you can assume that partition sizes fixed at all times.
> Those sizes determine the limit however.  That said: it has to be
> checked board by board if such a limit can be increased at all.
>
> Greets
> Alex
>
> >
> >               In this version I used git submodules and friend CI with
> >               submodules. But I don't mind if you decide to maintain it
> in a different
> >               way.
> >
> >
> >       v10: - fix ping with following tftp command issue with incorrect
> >               ping timeout clear.
> >            - Makefile on make will init submodules and if needed will
> >              do git clone.
> >            - wget - some minor code style changes.
> >       v9: - added first patch describing git submodule for lwip. So
> >             the build procedure is:
> >               git submodule init
> >               git submodule update
> >               make
> >           - reworked a little bit dhcp cmd state polling
> >           - fixed review comments for v8
> >       v8: - comments for previous review
> >           - removed lwip timeout callback pointer
> >           - made lwip timeouts works, that also allowed to remove
> >             static vars.
> >           - setenv for filesize tftp and wget has to be in hex.
> >           - Makefile changes always compile it tftp,dns,wget,ping due
> >             to it can be used not only by CONFIG_CMD_.
> >           - Kconfig changes - simplify lwIP settings and support only
> >             one configuration.
> >           - tested with mini debian.iso load over http or tftp, mount
> >             and boot it (qemu, arm64).
> >       v7: - more review fixes.
> >           - support of multiply eth devices, were "ethact" selects the
> >             active device.
> >       v6: - fixed review comments for v5 (thanks Ilias and Simon).
> >       v5: - fixed Iliases comments and split big patch on the small
> >               ones.
> >       v4: - tested with tests/py/ did some minor fixes (out of tree
> >               build, variables set after downloads).
> >           - accounted review comments for documentation.
> >           - implemented dns command
> >             - corrected wget command to not use serverip variable and
> use just
> >               url string.
> >       v3: - use lwip commands for ping,tftp,wget,dhcp if this patch
> >             applied. Drop CONFIG_LIB_LWIP_REPLACE_<COMMAND> option.
> >           - docs: use rst variant and drop references to RFC.
> >
> > Maxim Uvarov (43):
> >   submodule: add lwIP as git submodule
> >   net/lwip: add doc/develop/net_lwip.rst
> >   net/lwip: integrate lwIP library
> >   net/lwip: implement dns cmd
> >   net/lwip: implement dhcp cmd
> >   net/lwip: implement tftp cmd
> >   net/lwip: implement wget cmd
> >   net/lwip: implement ping cmd
> >   net/lwip: add lwIP configuration
> >   net/lwip: implement lwIP port to U-Boot
> >   net/lwip: update .gitignore with lwIP
> >   net/lwip: connection between cmd and lwip apps
> >   net/lwip: replace original net commands with lwip
> >   net/lwip: split net.h to net.h, arp.h and eth.h
> >   test_efi_loader.py: use $filesize var
> >   test_net: print out net list
> >   net: sandbox: fix NULL pointer derefences
> >   net/smc911x: fix return from smc911x_send
> >   sandbox: eth-raw-os: successful return code is 0
> >   driver/net/rtl8139: remove debug print
> >   mach-socfpga: do not overlap defines with lwip
> >   bcm_ns3: fix overlap define with lwip
> >   rcar3_salvator-x_defconfig: increase binary size limit
> >   lwip: omap3: rename mem_init
> >   configs/turris_omnia_defconfig set limit to 0xf6000
> >   configs/tbs2910_defconfig inc limit
> >   configs/socfpga_secu1_defconfig: enable LTO
> >   configs/turris_omnia_defconfig: enable LTO
> >   configs/am335x_boneblack_vboot_defconfig: enable LTO and increase SPL
> >     size
> >   configs/sheevaplug_defconfig: enable LTO and inc size
> >   configs/lschlv2_defconfig: enable LTO and inc size
> >   configs/lsxhl_defconfig: LTO + size
> >   configs/am335x_evm_defconfig: inc SPL size
> >   configs/bk4r1_defconfig: inc size
> >   configs/linkit-smart-7688_defconfig: increse size
> >   configs/gardena-smart-gateway-mt7688_defconfig: increase size
> >   configs/rcar3_ulcb_defconfig: increase size
> >   configs/qemu-x86_64_defconfig: increase ROM size
> >   Makefile: add dtbs to clean
> >   .azure-pipelines: init submodules
> >   mach-mtmips: inc SPL size limit
> >   configs/linkit-smart-7688_defconfig: increase board limit
> >   .gitlab-ci.yml: change ownership of the git files
> >
> >  .azure-pipelines.yml                          |  10 +-
> >  .gitlab-ci.yml                                |  15 +-
> >  .gitmodules                                   |   4 +
> >  Makefile                                      |  12 +-
> >  arch/arm/include/asm/arch-omap3/mem.h         |   2 +-
> >  arch/arm/mach-omap2/omap3/board.c             |   2 +-
> >  arch/arm/mach-omap2/omap3/emif4.c             |   4 +-
> >  arch/arm/mach-omap2/omap3/sdrc.c              |   6 +-
> >  .../mach-socfpga/include/mach/handoff_soc64.h |   6 -
> >  arch/arm/mach-socfpga/wrap_handoff_soc64.c    |   9 +
> >  arch/mips/mach-mtmips/Kconfig                 |   2 +-
> >  arch/sandbox/cpu/eth-raw-os.c                 |   2 +-
> >  boot/bootmeth_efi.c                           |  18 +-
> >  boot/bootmeth_pxe.c                           |  21 +-
> >  cmd/Makefile                                  |   1 +
> >  cmd/net-lwip.c                                | 307 ++++++++++++++++
> >  cmd/net.c                                     |  86 +----
> >  cmd/pxe.c                                     |  19 +-
> >  configs/am335x_boneblack_vboot_defconfig      |   3 +
> >  configs/am335x_evm_defconfig                  |   1 +
> >  configs/bk4r1_defconfig                       |   2 +-
> >  .../gardena-smart-gateway-mt7688_defconfig    |   2 +-
> >  configs/linkit-smart-7688_defconfig           |   2 +-
> >  configs/lschlv2_defconfig                     |   3 +-
> >  configs/lsxhl_defconfig                       |   3 +-
> >  configs/qemu-x86_64_defconfig                 |   5 +-
> >  configs/rcar3_salvator-x_defconfig            |   3 +-
> >  configs/rcar3_ulcb_defconfig                  |   1 +
> >  configs/sheevaplug_defconfig                  |   3 +-
> >  configs/socfpga_secu1_defconfig               |   1 +
> >  configs/tbs2910_defconfig                     |   2 +-
> >  configs/turris_omnia_defconfig                |   3 +-
> >  doc/develop/index.rst                         |   1 +
> >  doc/develop/net_lwip.rst                      |  75 ++++
> >  drivers/net/rtl8139.c                         |   1 -
> >  drivers/net/sandbox.c                         |   5 +
> >  drivers/net/smc911x.c                         |   2 +-
> >  include/configs/bcm_ns3.h                     |   6 +-
> >  include/net.h                                 | 197 +----------
> >  include/net/arp.h                             |   9 +
> >  include/net/eth.h                             | 194 +++++++++++
> >  include/net/lwip.h                            |  73 ++++
> >  include/net/ulwip.h                           |  67 ++++
> >  lib/Kconfig                                   |   2 +-
> >  net/Kconfig                                   |   3 +
> >  net/Makefile                                  |   1 +
> >  net/eth-uclass.c                              |  37 +-
> >  net/lwip/.gitignore                           |   8 +
> >  net/lwip/Kconfig                              |  34 ++
> >  net/lwip/Makefile                             |  70 ++++
> >  net/lwip/apps/dhcp/lwip-dhcp.c                |  86 +++++
> >  net/lwip/apps/dns/lwip-dns.c                  |  63 ++++
> >  net/lwip/apps/http/Makefile                   |   6 +
> >  net/lwip/apps/http/lwip-wget.c                | 105 ++++++
> >  net/lwip/apps/ping/Makefile                   |  12 +
> >  net/lwip/apps/ping/lwip_ping.c                |  39 +++
> >  net/lwip/apps/ping/lwip_ping.h                |  15 +
> >  net/lwip/apps/ping/ping.h                     |  28 ++
> >  net/lwip/apps/tftp/Makefile                   |   7 +
> >  net/lwip/apps/tftp/lwip-tftp.c                | 132 +++++++
> >  net/lwip/lwip-external                        |   1 +
> >  net/lwip/lwipopts.h                           | 178 ++++++++++
> >  net/lwip/port/if.c                            | 327 ++++++++++++++++++
> >  net/lwip/port/include/arch/cc.h               |  44 +++
> >  net/lwip/port/include/arch/sys_arch.h         |  10 +
> >  net/lwip/port/include/limits.h                |   0
> >  net/lwip/port/sys-arch.c                      |  13 +
> >  net/net.c                                     |  44 ++-
> >  test/py/tests/test_efi_loader.py              |   4 +-
> >  test/py/tests/test_net.py                     |   2 +
> >  70 files changed, 2113 insertions(+), 348 deletions(-)
> >  create mode 100644 .gitmodules
> >  create mode 100644 cmd/net-lwip.c
> >  create mode 100644 doc/develop/net_lwip.rst
> >  create mode 100644 include/net/arp.h
> >  create mode 100644 include/net/eth.h
> >  create mode 100644 include/net/lwip.h
> >  create mode 100644 include/net/ulwip.h
> >  create mode 100644 net/lwip/.gitignore
> >  create mode 100644 net/lwip/Kconfig
> >  create mode 100644 net/lwip/Makefile
> >  create mode 100644 net/lwip/apps/dhcp/lwip-dhcp.c
> >  create mode 100644 net/lwip/apps/dns/lwip-dns.c
> >  create mode 100644 net/lwip/apps/http/Makefile
> >  create mode 100644 net/lwip/apps/http/lwip-wget.c
> >  create mode 100644 net/lwip/apps/ping/Makefile
> >  create mode 100644 net/lwip/apps/ping/lwip_ping.c
> >  create mode 100644 net/lwip/apps/ping/lwip_ping.h
> >  create mode 100644 net/lwip/apps/ping/ping.h
> >  create mode 100644 net/lwip/apps/tftp/Makefile
> >  create mode 100644 net/lwip/apps/tftp/lwip-tftp.c
> >  create mode 160000 net/lwip/lwip-external
> >  create mode 100644 net/lwip/lwipopts.h
> >  create mode 100644 net/lwip/port/if.c
> >  create mode 100644 net/lwip/port/include/arch/cc.h
> >  create mode 100644 net/lwip/port/include/arch/sys_arch.h
> >  create mode 100644 net/lwip/port/include/limits.h
> >  create mode 100644 net/lwip/port/sys-arch.c
> >
> > --
> > 2.30.2
> >
>


More information about the U-Boot mailing list