[RFC PATCH 0/5] LWIP stack integration
Maxim Uvarov
maxim.uvarov at linaro.org
Thu May 11 15:28:41 CEST 2023
On Mon, 8 May 2023 at 17:23, Simon Glass <sjg at chromium.org> wrote:
>
> 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
lwip is commonly used for non linux micro controllers which should
have a wide community and a bunch of examples for applications. So
it's closer to resources which we have inside u-boot. I don't strictly
vote for lwip, it can be any IP stack which already exists. But not
implement an IP stack inside u-boot. lwip looks reasonable. So if the
RFC idea is accepted I can work on real patches.
Best regards,
Maxim.
More information about the U-Boot
mailing list