Re: [PATCH v5 02/20] net: introduce alternative implementation as net-lwip/

Maxim Uvarov
2024-07-25T17:14:07Z

чт, 25 июл. 2024 г. в 15:58, Jerome Forissier <jerome.forissier@linaro.org>:
>
> Prepare the introduction of the lwIP (lightweight IP) TCP/IP stack by
> adding a new net/lwip/ directory and the NET_LWIP symbol. Network
> support is either NO_NET, NET (legacy stack) or NET_LWIP. Subsequent
> commits will introduce the lwIP code, re-work the NETDEVICE integration
> and port some of the NET commands and features to lwIP.
>
> SPL_NET cannot be enabled when NET_LWIP=y. SPL_NET pulls some symbols
> that are part of NET (such as arp_init(), arp_timeout_check(),
> arp_receive(), net_arp_wait_packet_ip()). lwIP support in SPL may be
> added later.
>
> Similarly, DFU_TFTP and FASTBOOT are not compatible with NET_LWIP
> because of dependencies on net_loop(), tftp_timeout_ms,
> tftp_timeout_count_max and other NET things. Let's add a dependency on
> !NET_LWIP for now.
>
> As for SANDBOX, NET_LWIP cannot be used either because of strong
> assumptions on the network stack. Make NET_LWIP depend on !SANDBOX so
> that the NET_LWIP alternative is not visible in make menuconfig when
> sandbox_defconfig is used.
>
> Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org>
> ---
> Kconfig | 26 ++++++++++++++++++++++++++
> common/Kconfig | 2 +-
> common/spl/Kconfig | 1 +
> drivers/dfu/Kconfig | 1 +
> drivers/fastboot/Kconfig | 1 +
> drivers/net/Kconfig | 1 +
> drivers/net/phy/Kconfig | 2 +-
> drivers/usb/gadget/Kconfig | 2 +-
> net/Kconfig | 29 +++++++++++++++--------------
> net/Makefile | 4 ++++
> net/lwip/Kconfig | 36 ++++++++++++++++++++++++++++++++++++
> 11 files changed, 88 insertions(+), 17 deletions(-)
> create mode 100644 net/lwip/Kconfig
>
> diff --git a/Kconfig b/Kconfig
> index 82df59f176e..61bc6529617 100644
> --- a/Kconfig
> +++ b/Kconfig
> @@ -745,6 +745,32 @@ source "dts/Kconfig"
>
> source "env/Kconfig"
>
> +choice
> + prompt "Networking stack"
> + default NET
> +
> +config NO_NET
> + bool "No networking support"
> +
> +config NET
> + bool "Legacy U-Boot networking stack"
> + imply NETDEVICES
> +
> +config NET_LWIP
> + bool "Use lwIP for networking stack"
> + imply NETDEVICES
> + depends on !SANDBOX
> + help
> + Include networking support based on the lwIP (lightweight IP)
> + TCP/IP stack (https://nongnu.org/lwip). This is a replacement for
> + the default U-Boot network stack and applications located in net/
> + and enabled via CONFIG_NET as well as other pieces of code that
> + depend on CONFIG_NET (such as cmd/net.c enabled via CONFIG_CMD_NET).
> + Therefore the two symbols CONFIG_NET and CONFIG_NET_LWIP are mutually
> + exclusive.
> +
> +endchoice
> +
> source "net/Kconfig"
>
> source "drivers/Kconfig"
> diff --git a/common/Kconfig b/common/Kconfig
> index 4bb9f08977a..1daa495080a 100644
> --- a/common/Kconfig
> +++ b/common/Kconfig
> @@ -424,7 +424,7 @@ config LOGF_FUNC_PAD
>
> config LOG_SYSLOG
> bool "Log output to syslog server"
> - depends on NET
> + depends on NET || NET_LWIP
> help
> Enables a log driver which broadcasts log records via UDP port 514
> to syslog servers.
> diff --git a/common/spl/Kconfig b/common/spl/Kconfig
> index af43b5f5d3c..2731849841a 100644
> --- a/common/spl/Kconfig
> +++ b/common/spl/Kconfig
> @@ -1063,6 +1063,7 @@ config SPL_DM_SPI_FLASH
>
> config SPL_NET
> bool "Support networking"
> + depends on !NET_LWIP
> help
> Enable support for network devices (such as Ethernet) in SPL.
> This permits SPL to load U-Boot over a network link rather than
> diff --git a/drivers/dfu/Kconfig b/drivers/dfu/Kconfig
> index 971204758aa..d034b501360 100644
> --- a/drivers/dfu/Kconfig
> +++ b/drivers/dfu/Kconfig
> @@ -20,6 +20,7 @@ config DFU_WRITE_ALT
> config DFU_TFTP
> bool "DFU via TFTP"
> depends on NETDEVICES
> + depends on !NET_LWIP
> select UPDATE_COMMON
> select DFU_OVER_TFTP
> help
> diff --git a/drivers/fastboot/Kconfig b/drivers/fastboot/Kconfig
> index 70207573de2..1eb460f5a02 100644
> --- a/drivers/fastboot/Kconfig
> +++ b/drivers/fastboot/Kconfig
> @@ -1,5 +1,6 @@
> menu "Fastboot support"
> depends on CMDLINE
> + depends on !NET_LWIP
>
> config FASTBOOT
> bool
> diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
> index b4ff033afa9..d332f712a7c 100644
> --- a/drivers/net/Kconfig
> +++ b/drivers/net/Kconfig
> @@ -48,6 +48,7 @@ config DM_DSA
> bool "Enable Driver Model for DSA switches"
> depends on DM_MDIO
> depends on PHY_FIXED
> + depends on !NET_LWIP
> help
> Enable driver model for DSA switches
>
> diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
> index 73064b2af68..75986162914 100644
> --- a/drivers/net/phy/Kconfig
> +++ b/drivers/net/phy/Kconfig
> @@ -11,7 +11,7 @@ config MV88E6352_SWITCH
>
> menuconfig PHYLIB
> bool "Ethernet PHY (physical media interface) support"
> - depends on NET
> + depends on NET || NET_LWIP
> help
> Enable Ethernet PHY (physical media interface) support.
>
> diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
> index 4621a6fd5e6..03fe3bca197 100644
> --- a/drivers/usb/gadget/Kconfig
> +++ b/drivers/usb/gadget/Kconfig
> @@ -224,7 +224,7 @@ endif # USB_GADGET_DOWNLOAD
>
> config USB_ETHER
> bool "USB Ethernet Gadget"
> - depends on NET
> + depends on NET || NET_LWIP
> default y if ARCH_SUNXI && USB_MUSB_GADGET
> help
> Creates an Ethernet network device through a USB peripheral
> diff --git a/net/Kconfig b/net/Kconfig
> index 5dff6336293..952690d677d 100644
> --- a/net/Kconfig
> +++ b/net/Kconfig
> @@ -2,11 +2,6 @@
> # Network configuration
> #
>
> -menuconfig NET
> - bool "Networking support"
> - default y
> - imply NETDEVICES
> -
> if NET
>
> config ARP_TIMEOUT
> @@ -26,15 +21,6 @@ config PROT_UDP
> Enable a generic udp framework that allows defining a custom
> handler for udp protocol.
>
> -config BOOTDEV_ETH
> - bool "Enable bootdev for ethernet"
> - depends on BOOTSTD
> - default y
> - help
> - Provide a bootdev for ethernet so that is it possible to boot
> - an operationg system over the network, using the PXE (Preboot
> - Execution Environment) protocol.
> -
> config BOOTP_SEND_HOSTNAME
> bool "Send hostname to DNS server"
> help
> @@ -255,6 +241,19 @@ config IPV6
>
> endif # if NET
>
> +source "net/lwip/Kconfig"
> +
> +if NET || NET_LWIP
> +
> +config BOOTDEV_ETH
> + bool "Enable bootdev for ethernet"
> + depends on BOOTSTD
> + default y
> + help
> + Provide a bootdev for ethernet so that is it possible to boot
> + an operating system over the network, using the PXE (Preboot
> + Execution Environment) protocol.
> +
> config SYS_RX_ETH_BUFFER
> int "Number of receive packet buffers"
> default 4
> @@ -263,3 +262,5 @@ config SYS_RX_ETH_BUFFER
> controllers it is recommended to set this value to 8 or even higher,
> since all buffers can be full shortly after enabling the interface on
> high Ethernet traffic.
> +
> +endif # if NET || NET_LWIP
> diff --git a/net/Makefile b/net/Makefile
> index 64ab7ec740a..70eec8caf0d 100644
> --- a/net/Makefile
> +++ b/net/Makefile
> @@ -5,6 +5,8 @@
>
> #ccflags-y += -DDEBUG
>
> +ifeq ($(CONFIG_NET),y)
> +
> obj-$(CONFIG_NET) += arp.o
> obj-$(CONFIG_CMD_BOOTP) += bootp.o
> obj-$(CONFIG_CMD_CDP) += cdp.o
> @@ -38,3 +40,5 @@ obj-$(CONFIG_CMD_WGET) += wget.o
> # sprintf(buf, index ? "foo%d" : "foo", index)
> # and this is intentional usage.
> CFLAGS_eth_common.o += -Wno-format-extra-args
> +
> +endif
> diff --git a/net/lwip/Kconfig b/net/lwip/Kconfig
> new file mode 100644
> index 00000000000..0a6bcb41369
> --- /dev/null
> +++ b/net/lwip/Kconfig
> @@ -0,0 +1,36 @@
> +#
> +# Network configuration (with lwIP stack)
> +#
> +
> +config LWIP_DEBUG
> + bool "Enable debug traces in the lwIP library"
> +
> +config LWIP_ASSERT
> + bool "Enable assertions in the lwIP library"
> +
> +config PROT_DHCP_LWIP
> + bool "DHCP support in lwIP"
> + depends on PROT_UDP_LWIP
> + help
> + Enable support for the DHCP protocol in lwIP.
> +
> +config PROT_DNS_LWIP
> + bool
> + depends on PROT_UDP_LWIP
> +
> +config PROT_RAW_LWIP
> + bool
> +
> +config PROT_TCP_LWIP
> + bool

Hello Jerome,

Not very critical, but it will be good to align options names. I
think CONFIG_NET_LWIP_ is a good prefix.
It will be easier to grep configuration from .config.

BR,
Maxim.

> +
> +config PROT_TCP_SACK_LWIP
> + bool "TCP SACK support"
> + depends on PROT_TCP_LWIP
> + default y
> + help
> + TCP protocol with selective acknowledgements. Improves
> + file transfer speed in wget.
> +
> +config PROT_UDP_LWIP
> + bool
> --
> 2.40.1
>

--
Best regards,
Maxim Uvarov