[RFC PATCH 0/5] LWIP stack integration

Simon Glass sjg at chromium.org
Mon May 8 23:23:17 CEST 2023


Hi Maxim,

On Fri, 5 May 2023 at 04:50, Maxim Uvarov <maxim.uvarov at linaro.org> wrote:
>
> Greetings,
>
> This RFC patchset is an attempt to try to use an already existing IP network stack inside U-boot.
> U-Boot recently got basic TCP/IP support, implementing wget, but in order to get a full IP stack
> with new features (e.g ipv6), it would be preferable to use an established embedded ip library,
> instead of rewriting the code from scratch.
>
> For this experiment LWIP network stack was selected:
> https://savannah.nongnu.org/git/?group=lwip
>
> LWIP main features include:
> - Protocols: IP, IPv6, ICMP, ND, MLD, UDP, TCP, IGMP, ARP, PPPoS, PPPoE
> - DHCP client, DNS client (incl. mDNS hostname resolver), AutoIP/APIPA (Zeroconf),
>   SNMP agent (v1, v2c, v3, private MIB support & MIB compiler)
> - APIs: specialized APIs for enhanced performance, optional Berkeley-alike socket API
> - Extended features: IP forwarding over multiple network interfaces, TCP congestion control,
>   RTT estimation and fast recovery/fast retransmit
> - Addon applications: HTTP(S) server, SNTP client, SMTP(S) client, ping, NetBIOS nameserver,
>   mDNS responder, MQTT client, TFTP server.
>
> This RFC work is a demo to enable lwIP (lightweight IP) which is a widely used open-source
> TCP/IP stack designed for embedded systems for U-boot. That will allow using already
> written network applications for microcontrollers.
>
> lwIP is licensed under a BSD-style license: http://lwip.wikia.com/wiki/License.
> Which should be compatible with u-boot.
>
> In the current RFC I tried to use minimal changes to better see how LWIP code can be embedded into
> U-boot. Patches implement ping and wget commands work. Both commands are currently copy pasting and
> reusing lwIP examples.  Whether we want to add the final application in U-Boot or lwIP is up to
> discussion, but the current approach was the easiest one for an RFC.
>
> Looking for your comments,
> Best regards,
> Maxim.
>
> Maxim Uvarov (5):
>   add lwip-external submodule
>   lib/lwip: compile-in core files
>   add doc/README.lwip
>   add doc/README.lwip.size
>   lwip: implement wget command from http_client.c example
>
>  .gitignore                             |   5 +
>  .gitmodules                            |   3 +
>  doc/README.lwip                        |  90 +++++
>  doc/README.lwip.size                   | 291 +++++++++++++++
>  include/net.h                          |   2 +-
>  lib/Kconfig                            |   2 +
>  lib/Makefile                           |   2 +
>  lib/lwip/Kconfig                       |  12 +
>  lib/lwip/Makefile                      |  86 +++++
>  lib/lwip/apps/http/lwip-wget.c         |  67 ++++
>  lib/lwip/apps/http/rmstatic.patch      |  47 +++
>  lib/lwip/apps/ping/lwip_ping.c         |  33 ++
>  lib/lwip/apps/ping/lwip_ping.h         |  19 +
>  lib/lwip/apps/ping/ping.h              |   0
>  lib/lwip/apps/ping/rmstatic.patch      |  32 ++
>  lib/lwip/cmd-lwip.c                    | 129 +++++++
>  lib/lwip/lwip-external                 |   1 +
>  lib/lwip/lwipopts.h                    | 484 +++++++++++++++++++++++++
>  lib/lwip/port/if.c                     | 256 +++++++++++++
>  lib/lwip/port/include/arch/cc.h        |  41 +++
>  lib/lwip/port/include/arch/sys_arch.h  |  78 ++++
>  lib/lwip/port/include/arch/u-sockets.h |  26 ++
>  lib/lwip/port/include/limits.h         |   0
>  lib/lwip/port/sys-arch.c               |   7 +
>  net/eth-uclass.c                       |   4 +-
>  net/net.c                              |  14 +
>  26 files changed, 1729 insertions(+), 2 deletions(-)
>  create mode 100644 .gitmodules
>  create mode 100644 doc/README.lwip
>  create mode 100644 doc/README.lwip.size
>  create mode 100644 lib/lwip/Kconfig
>  create mode 100644 lib/lwip/Makefile
>  create mode 100644 lib/lwip/apps/http/lwip-wget.c
>  create mode 100644 lib/lwip/apps/http/rmstatic.patch
>  create mode 100644 lib/lwip/apps/ping/lwip_ping.c
>  create mode 100644 lib/lwip/apps/ping/lwip_ping.h
>  create mode 100644 lib/lwip/apps/ping/ping.h
>  create mode 100644 lib/lwip/apps/ping/rmstatic.patch
>  create mode 100644 lib/lwip/cmd-lwip.c
>  create mode 160000 lib/lwip/lwip-external
>  create mode 100644 lib/lwip/lwipopts.h
>  create mode 100644 lib/lwip/port/if.c
>  create mode 100644 lib/lwip/port/include/arch/cc.h
>  create mode 100644 lib/lwip/port/include/arch/sys_arch.h
>  create mode 100644 lib/lwip/port/include/arch/u-sockets.h
>  create mode 100644 lib/lwip/port/include/limits.h
>  create mode 100644 lib/lwip/port/sys-arch.c
>
> --
> 2.30.2
>

I don't know much about lwip but I certainly think we should be open
to changing the network stack, if it is better.

Regards,
Simon


More information about the U-Boot mailing list