Message ID | f382942cd9d0d62da5204b884c6fa1a59526d262.1718638104.git.jerome.forissier@linaro.org |
---|---|
State | New |
Headers | show |
Series | Introduce the lwIP network stack | expand |
On Mon, Jun 17, 2024 at 05:32:54PM +0200, Jerome Forissier wrote: > 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. [snip] > diff --git a/Kconfig b/Kconfig > index 82df59f176e..cfe2a6d3eac 100644 > --- a/Kconfig > +++ b/Kconfig > @@ -745,7 +745,48 @@ 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 For ease of reviewability the next patch in the series should change all of the configs with '# CONFIG_NET is not set' to 'CONFIG_NO_NET=y' so that they functionally don't change. It's 105 files and so while it will be folded in when lwIP is ready for merge, keeping it separate for now will make review easier.
On 6/18/24 19:59, Tom Rini wrote: > On Mon, Jun 17, 2024 at 05:32:54PM +0200, Jerome Forissier wrote: > >> 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. > [snip] >> diff --git a/Kconfig b/Kconfig >> index 82df59f176e..cfe2a6d3eac 100644 >> --- a/Kconfig >> +++ b/Kconfig >> @@ -745,7 +745,48 @@ 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 > > For ease of reviewability the next patch in the series should change all > of the configs with '# CONFIG_NET is not set' to 'CONFIG_NO_NET=y' so > that they functionally don't change. It's 105 files and so while it will > be folded in when lwIP is ready for merge, keeping it separate for now > will make review easier. OK, done in v6. Thanks,
diff --git a/Kconfig b/Kconfig index 82df59f176e..cfe2a6d3eac 100644 --- a/Kconfig +++ b/Kconfig @@ -745,7 +745,48 @@ 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 + +if NET source "net/Kconfig" +endif + +if NET_LWIP +source "net-lwip/Kconfig" +endif + +config SYS_RX_ETH_BUFFER + int "Number of receive packet buffers" + default 4 + help + Defines the number of Ethernet receive buffers. On some Ethernet + 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. source "drivers/Kconfig" diff --git a/Makefile b/Makefile index f8206b2e30a..ceb99a2698e 100644 --- a/Makefile +++ b/Makefile @@ -859,7 +859,7 @@ libs-$(CONFIG_OF_EMBED) += dts/ libs-y += env/ libs-y += lib/ libs-y += fs/ -libs-y += net/ +libs-$(CONFIG_NET) += net/ libs-y += disk/ libs-y += drivers/ libs-$(CONFIG_SYS_FSL_DDR) += drivers/ddr/fsl/ diff --git a/common/Kconfig b/common/Kconfig index 5e3070e9253..807b726384d 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 6405374bcc1..f67f0a859db 100644 --- a/common/spl/Kconfig +++ b/common/spl/Kconfig @@ -1055,6 +1055,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 0360d9da142..6405a23574e 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 b2d7b499766..efc55e45ca8 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 3d96938eaba..738752d29c2 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-lwip/Kconfig b/net-lwip/Kconfig new file mode 100644 index 00000000000..a0938964b51 --- /dev/null +++ b/net-lwip/Kconfig @@ -0,0 +1,37 @@ +# +# 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 + +config PROT_UDP_LWIP + bool + +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. diff --git a/net/Kconfig b/net/Kconfig index 5dff6336293..4929428d2a5 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 @@ -254,12 +249,3 @@ config IPV6 address and find it, it will force using IPv6 in the network stack. endif # if NET - -config SYS_RX_ETH_BUFFER - int "Number of receive packet buffers" - default 4 - help - Defines the number of Ethernet receive buffers. On some Ethernet - 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.
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 | 41 ++++++++++++++++++++++++++++++++++++++ Makefile | 2 +- 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-lwip/Kconfig | 37 ++++++++++++++++++++++++++++++++++ net/Kconfig | 14 ------------- 11 files changed, 86 insertions(+), 18 deletions(-) create mode 100644 net-lwip/Kconfig