refactor(lwip): Added on/off switch for LwIP stack

* This switch allows applications to replace lwip with a different
  IP stack or just make it build if it is a dependency but not
  actually needed.
pull/12330/head
Jakob Hasse 2023-09-07 13:17:02 +08:00
rodzic 3093384045
commit ac2515e199
7 zmienionych plików z 199 dodań i 179 usunięć

Wyświetl plik

@ -35,7 +35,7 @@ set_property(TARGET ${lwip} APPEND PROPERTY LINK_INTERFACE_MULTIPLICITY 5)
else() else()
# Check if LWIP in the build for linux target to adapt esp-tls compatibility layer # Check if LWIP in the build for linux target to adapt esp-tls compatibility layer
idf_build_get_property(build_components BUILD_COMPONENTS) idf_build_get_property(build_components BUILD_COMPONENTS)
if("lwip" IN_LIST build_components) if(CONFIG_LWIP_ENABLE)
target_compile_definitions(${COMPONENT_LIB} PRIVATE ESP_TLS_WITH_LWIP=1) target_compile_definitions(${COMPONENT_LIB} PRIVATE ESP_TLS_WITH_LWIP=1)
endif() endif()
endif() endif()

Wyświetl plik

@ -1,107 +1,76 @@
idf_build_get_property(target IDF_TARGET) idf_build_get_property(target IDF_TARGET)
if(NOT ${target} STREQUAL "linux")
# ESP platform targets share the same port folder
set(target esp32xx)
endif()
set(include_dirs if(CONFIG_LWIP_ENABLE)
include if(NOT ${target} STREQUAL "linux")
include/apps # ESP platform targets share the same port folder
include/apps/sntp set(target esp32xx)
lwip/src/include endif()
port/include
port/freertos/include/
port/${target}/include
port/${target}/include/arch
port/${target}/include/sys
)
set(srcs set(include_dirs
"apps/sntp/sntp.c" include
"lwip/src/api/api_lib.c" include/apps
"lwip/src/api/api_msg.c" include/apps/sntp
"lwip/src/api/err.c" lwip/src/include
"lwip/src/api/if_api.c" port/include
"lwip/src/api/netbuf.c" port/freertos/include/
"lwip/src/api/netdb.c" port/${target}/include
"lwip/src/api/netifapi.c" port/${target}/include/arch
"lwip/src/api/sockets.c" port/${target}/include/sys
"lwip/src/api/tcpip.c" )
"lwip/src/apps/sntp/sntp.c"
"lwip/src/apps/netbiosns/netbiosns.c"
"lwip/src/core/def.c"
"lwip/src/core/dns.c"
"lwip/src/core/inet_chksum.c"
"lwip/src/core/init.c"
"lwip/src/core/ip.c"
"lwip/src/core/mem.c"
"lwip/src/core/memp.c"
"lwip/src/core/netif.c"
"lwip/src/core/pbuf.c"
"lwip/src/core/raw.c"
"lwip/src/core/stats.c"
"lwip/src/core/sys.c"
"lwip/src/core/tcp.c"
"lwip/src/core/tcp_in.c"
"lwip/src/core/tcp_out.c"
"lwip/src/core/timeouts.c"
"lwip/src/core/udp.c"
"lwip/src/core/ipv4/autoip.c"
"lwip/src/core/ipv4/dhcp.c"
"lwip/src/core/ipv4/etharp.c"
"lwip/src/core/ipv4/icmp.c"
"lwip/src/core/ipv4/igmp.c"
"lwip/src/core/ipv4/ip4.c"
"lwip/src/core/ipv4/ip4_napt.c"
"lwip/src/core/ipv4/ip4_addr.c"
"lwip/src/core/ipv4/ip4_frag.c"
"lwip/src/core/ipv6/dhcp6.c"
"lwip/src/core/ipv6/ethip6.c"
"lwip/src/core/ipv6/icmp6.c"
"lwip/src/core/ipv6/inet6.c"
"lwip/src/core/ipv6/ip6.c"
"lwip/src/core/ipv6/ip6_addr.c"
"lwip/src/core/ipv6/ip6_frag.c"
"lwip/src/core/ipv6/mld6.c"
"lwip/src/core/ipv6/nd6.c"
"lwip/src/netif/ethernet.c"
"lwip/src/netif/bridgeif.c"
"lwip/src/netif/bridgeif_fdb.c"
"lwip/src/netif/slipif.c"
"lwip/src/netif/slipif.c"
"lwip/src/netif/ppp/auth.c"
"lwip/src/netif/ppp/ccp.c"
"lwip/src/netif/ppp/chap-md5.c"
"lwip/src/netif/ppp/chap-new.c"
"lwip/src/netif/ppp/chap_ms.c"
"lwip/src/netif/ppp/demand.c"
"lwip/src/netif/ppp/eap.c"
"lwip/src/netif/ppp/ecp.c"
"lwip/src/netif/ppp/eui64.c"
"lwip/src/netif/ppp/fsm.c"
"lwip/src/netif/ppp/ipcp.c"
"lwip/src/netif/ppp/ipv6cp.c"
"lwip/src/netif/ppp/lcp.c"
"lwip/src/netif/ppp/magic.c"
"lwip/src/netif/ppp/mppe.c"
"lwip/src/netif/ppp/multilink.c"
"lwip/src/netif/ppp/ppp.c"
"lwip/src/netif/ppp/pppapi.c"
"lwip/src/netif/ppp/pppcrypt.c"
"lwip/src/netif/ppp/pppoe.c"
"lwip/src/netif/ppp/pppol2tp.c"
"lwip/src/netif/ppp/pppos.c"
"lwip/src/netif/ppp/upap.c"
"lwip/src/netif/ppp/utils.c"
"lwip/src/netif/ppp/vj.c"
"port/hooks/tcp_isn_default.c"
"port/hooks/lwip_default_hooks.c"
"port/debug/lwip_debug.c"
"port/sockets_ext.c"
"port/freertos/sys_arch.c")
if(CONFIG_LWIP_PPP_SUPPORT) set(srcs
list(APPEND srcs "apps/sntp/sntp.c"
"lwip/src/api/api_lib.c"
"lwip/src/api/api_msg.c"
"lwip/src/api/err.c"
"lwip/src/api/if_api.c"
"lwip/src/api/netbuf.c"
"lwip/src/api/netdb.c"
"lwip/src/api/netifapi.c"
"lwip/src/api/sockets.c"
"lwip/src/api/tcpip.c"
"lwip/src/apps/sntp/sntp.c"
"lwip/src/apps/netbiosns/netbiosns.c"
"lwip/src/core/def.c"
"lwip/src/core/dns.c"
"lwip/src/core/inet_chksum.c"
"lwip/src/core/init.c"
"lwip/src/core/ip.c"
"lwip/src/core/mem.c"
"lwip/src/core/memp.c"
"lwip/src/core/netif.c"
"lwip/src/core/pbuf.c"
"lwip/src/core/raw.c"
"lwip/src/core/stats.c"
"lwip/src/core/sys.c"
"lwip/src/core/tcp.c"
"lwip/src/core/tcp_in.c"
"lwip/src/core/tcp_out.c"
"lwip/src/core/timeouts.c"
"lwip/src/core/udp.c"
"lwip/src/core/ipv4/autoip.c"
"lwip/src/core/ipv4/dhcp.c"
"lwip/src/core/ipv4/etharp.c"
"lwip/src/core/ipv4/icmp.c"
"lwip/src/core/ipv4/igmp.c"
"lwip/src/core/ipv4/ip4.c"
"lwip/src/core/ipv4/ip4_napt.c"
"lwip/src/core/ipv4/ip4_addr.c"
"lwip/src/core/ipv4/ip4_frag.c"
"lwip/src/core/ipv6/dhcp6.c"
"lwip/src/core/ipv6/ethip6.c"
"lwip/src/core/ipv6/icmp6.c"
"lwip/src/core/ipv6/inet6.c"
"lwip/src/core/ipv6/ip6.c"
"lwip/src/core/ipv6/ip6_addr.c"
"lwip/src/core/ipv6/ip6_frag.c"
"lwip/src/core/ipv6/mld6.c"
"lwip/src/core/ipv6/nd6.c"
"lwip/src/netif/ethernet.c"
"lwip/src/netif/bridgeif.c"
"lwip/src/netif/bridgeif_fdb.c"
"lwip/src/netif/slipif.c"
"lwip/src/netif/slipif.c"
"lwip/src/netif/ppp/auth.c" "lwip/src/netif/ppp/auth.c"
"lwip/src/netif/ppp/ccp.c" "lwip/src/netif/ppp/ccp.c"
"lwip/src/netif/ppp/chap-md5.c" "lwip/src/netif/ppp/chap-md5.c"
@ -127,40 +96,77 @@ if(CONFIG_LWIP_PPP_SUPPORT)
"lwip/src/netif/ppp/upap.c" "lwip/src/netif/ppp/upap.c"
"lwip/src/netif/ppp/utils.c" "lwip/src/netif/ppp/utils.c"
"lwip/src/netif/ppp/vj.c" "lwip/src/netif/ppp/vj.c"
"lwip/src/netif/ppp/polarssl/arc4.c" "port/hooks/tcp_isn_default.c"
"lwip/src/netif/ppp/polarssl/des.c" "port/hooks/lwip_default_hooks.c"
"lwip/src/netif/ppp/polarssl/md4.c" "port/debug/lwip_debug.c"
"lwip/src/netif/ppp/polarssl/md5.c" "port/sockets_ext.c"
"lwip/src/netif/ppp/polarssl/sha1.c") "port/freertos/sys_arch.c")
endif()
if(CONFIG_LWIP_PPP_SUPPORT)
list(APPEND srcs
"lwip/src/netif/ppp/auth.c"
"lwip/src/netif/ppp/ccp.c"
"lwip/src/netif/ppp/chap-md5.c"
"lwip/src/netif/ppp/chap-new.c"
"lwip/src/netif/ppp/chap_ms.c"
"lwip/src/netif/ppp/demand.c"
"lwip/src/netif/ppp/eap.c"
"lwip/src/netif/ppp/ecp.c"
"lwip/src/netif/ppp/eui64.c"
"lwip/src/netif/ppp/fsm.c"
"lwip/src/netif/ppp/ipcp.c"
"lwip/src/netif/ppp/ipv6cp.c"
"lwip/src/netif/ppp/lcp.c"
"lwip/src/netif/ppp/magic.c"
"lwip/src/netif/ppp/mppe.c"
"lwip/src/netif/ppp/multilink.c"
"lwip/src/netif/ppp/ppp.c"
"lwip/src/netif/ppp/pppapi.c"
"lwip/src/netif/ppp/pppcrypt.c"
"lwip/src/netif/ppp/pppoe.c"
"lwip/src/netif/ppp/pppol2tp.c"
"lwip/src/netif/ppp/pppos.c"
"lwip/src/netif/ppp/upap.c"
"lwip/src/netif/ppp/utils.c"
"lwip/src/netif/ppp/vj.c"
"lwip/src/netif/ppp/polarssl/arc4.c"
"lwip/src/netif/ppp/polarssl/des.c"
"lwip/src/netif/ppp/polarssl/md4.c"
"lwip/src/netif/ppp/polarssl/md5.c"
"lwip/src/netif/ppp/polarssl/sha1.c")
endif()
if(NOT ${target} STREQUAL "linux")
# Support for vfs and linker fragments only for target builds
set(linker_fragments linker.lf)
if(CONFIG_VFS_SUPPORT_IO)
list(APPEND srcs "port/${target}/vfs_lwip.c")
else()
list(APPEND srcs "port/${target}/no_vfs_syscalls.c")
endif()
else()
# This wraps some posix IO functions to conditionally pass control to lwip
list(APPEND srcs "port/${target}/vfs_lwip.c")
endif()
if(CONFIG_LWIP_ICMP)
list(APPEND srcs
"apps/ping/esp_ping.c"
"apps/ping/ping.c"
"apps/ping/ping_sock.c")
endif()
if(CONFIG_LWIP_DHCPS)
list(APPEND srcs "apps/dhcpserver/dhcpserver.c")
endif()
if(CONFIG_LWIP_DHCP_RESTORE_LAST_IP)
list(APPEND srcs "port/esp32xx/netif/dhcp_state.c")
endif()
endif() # CONFIG_LWIP_ENABLE
if(NOT ${target} STREQUAL "linux") if(NOT ${target} STREQUAL "linux")
# Support for vfs and linker fragments only for target builds
set(priv_requires vfs) set(priv_requires vfs)
set(linker_fragments linker.lf)
if(CONFIG_VFS_SUPPORT_IO)
list(APPEND srcs "port/${target}/vfs_lwip.c")
else()
list(APPEND srcs "port/${target}/no_vfs_syscalls.c")
endif()
else()
# This wraps some posix IO functions to conditionally pass control to lwip
list(APPEND srcs "port/${target}/vfs_lwip.c")
endif()
if(CONFIG_LWIP_ICMP)
list(APPEND srcs
"apps/ping/esp_ping.c"
"apps/ping/ping.c"
"apps/ping/ping_sock.c")
endif()
if(CONFIG_LWIP_DHCPS)
list(APPEND srcs "apps/dhcpserver/dhcpserver.c")
endif()
if(CONFIG_LWIP_DHCP_RESTORE_LAST_IP)
list(APPEND srcs "port/esp32xx/netif/dhcp_state.c")
endif() endif()
idf_component_register(SRCS "${srcs}" idf_component_register(SRCS "${srcs}"
@ -168,53 +174,55 @@ idf_component_register(SRCS "${srcs}"
LDFRAGMENTS ${linker_fragments} LDFRAGMENTS ${linker_fragments}
PRIV_REQUIRES ${priv_requires}) PRIV_REQUIRES ${priv_requires})
# lots of LWIP source files evaluate macros that check address of stack variables if(CONFIG_LWIP_ENABLE)
target_compile_options(${COMPONENT_LIB} PRIVATE -Wno-address) # lots of LWIP source files evaluate macros that check address of stack variables
target_compile_definitions(${COMPONENT_LIB} PRIVATE ESP_LWIP_COMPONENT_BUILD) target_compile_options(${COMPONENT_LIB} PRIVATE -Wno-address)
target_compile_definitions(${COMPONENT_LIB} PRIVATE ESP_LWIP_COMPONENT_BUILD)
set_source_files_properties( set_source_files_properties(
lwip/src/netif/ppp/pppos.c lwip/src/netif/ppp/pppos.c
PROPERTIES COMPILE_FLAGS PROPERTIES COMPILE_FLAGS
-Wno-type-limits -Wno-type-limits
)
# "comparison is always false due to limited range of data type" warning
# when setting CONFIG_LWIP_TCP_WND_DEFAULT to 65535
set_source_files_properties(
lwip/src/core/tcp.c
PROPERTIES COMPILE_FLAGS
-Wno-type-limits
) )
# "comparison is always false due to limited range of data type" warning
# when setting CONFIG_LWIP_TCP_WND_DEFAULT to 65535
set_source_files_properties(
lwip/src/core/tcp.c
PROPERTIES COMPILE_FLAGS
-Wno-type-limits
)
# ignore some declaration mismatches # ignore some declaration mismatches
set_source_files_properties( set_source_files_properties(
lwip/src/netif/ppp/chap_ms.c lwip/src/netif/ppp/chap_ms.c
PROPERTIES COMPILE_FLAGS PROPERTIES COMPILE_FLAGS
-Wno-array-parameter -Wno-array-parameter
) )
if(CONFIG_OPENTHREAD_ENABLED) if(CONFIG_OPENTHREAD_ENABLED)
idf_component_optional_requires(PRIVATE openthread) idf_component_optional_requires(PRIVATE openthread)
endif() endif()
if(CONFIG_ETH_ENABLED) if(CONFIG_ETH_ENABLED)
idf_component_optional_requires(PRIVATE esp_eth) idf_component_optional_requires(PRIVATE esp_eth)
endif() endif()
if(CONFIG_LWIP_DHCP_RESTORE_LAST_IP) if(CONFIG_LWIP_DHCP_RESTORE_LAST_IP)
idf_component_optional_requires(PRIVATE nvs_flash) idf_component_optional_requires(PRIVATE nvs_flash)
endif() endif()
if(${target} STREQUAL "linux") if(${target} STREQUAL "linux")
set(THREADS_PREFER_PTHREAD_FLAG ON) set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED) find_package(Threads REQUIRED)
target_link_libraries(${COMPONENT_LIB} PRIVATE Threads::Threads) target_link_libraries(${COMPONENT_LIB} PRIVATE Threads::Threads)
set(WRAP_FUNCTIONS select set(WRAP_FUNCTIONS select
read read
fcntl fcntl
write write
close) close)
foreach(wrap ${WRAP_FUNCTIONS}) foreach(wrap ${WRAP_FUNCTIONS})
target_link_libraries(${COMPONENT_LIB} INTERFACE "-Wl,--wrap=${wrap}") target_link_libraries(${COMPONENT_LIB} INTERFACE "-Wl,--wrap=${wrap}")
target_link_libraries(${COMPONENT_LIB} INTERFACE "-u __wrap_${wrap}") target_link_libraries(${COMPONENT_LIB} INTERFACE "-u __wrap_${wrap}")
endforeach() endforeach()
endif()
endif() endif()

Wyświetl plik

@ -1,4 +1,15 @@
menu "LWIP" menu "LWIP"
config LWIP_ENABLE
bool "Enable LwIP stack"
default y if !IDF_TARGET_LINUX
default n if IDF_TARGET_LINUX
help
Builds normally if selected. Excludes LwIP from build if unselected, even if it is a
dependency of a component or application.
Some applications can switch their IP stacks, e.g., when switching between chip
and Linux targets (LwIP stack vs. Linux IP stack). Since the LwIP dependency cannot
easily be excluded based on a Kconfig option, it has to be a dependency in all cases.
This switch allows the LwIP stack to be built selectively, even if it is a dependency.
config LWIP_LOCAL_HOSTNAME config LWIP_LOCAL_HOSTNAME
string "Local netif hostname" string "Local netif hostname"

Wyświetl plik

@ -134,8 +134,7 @@ endif()
# net_sockets.c should only be compiled if BSD socket functions are available. # net_sockets.c should only be compiled if BSD socket functions are available.
# Do this by checking if lwip component is included into the build. # Do this by checking if lwip component is included into the build.
idf_build_get_property(build_components BUILD_COMPONENTS) if(CONFIG_LWIP_ENABLE)
if(lwip IN_LIST build_components)
list(APPEND mbedtls_target_sources "${COMPONENT_DIR}/port/net_sockets.c") list(APPEND mbedtls_target_sources "${COMPONENT_DIR}/port/net_sockets.c")
idf_component_get_property(lwip_lib lwip COMPONENT_LIB) idf_component_get_property(lwip_lib lwip COMPONENT_LIB)
target_link_libraries(${COMPONENT_LIB} ${linkage_type} ${lwip_lib}) target_link_libraries(${COMPONENT_LIB} ${linkage_type} ${lwip_lib})

Wyświetl plik

@ -1,3 +1,4 @@
CONFIG_IDF_TARGET="linux" CONFIG_IDF_TARGET="linux"
CONFIG_EXAMPLE_IPV4_ADDR="127.0.0.1" CONFIG_EXAMPLE_IPV4_ADDR="127.0.0.1"
CONFIG_EXAMPLE_CONNECT_LWIP_TAPIF=n CONFIG_EXAMPLE_CONNECT_LWIP_TAPIF=n
CONFIG_LWIP_ENABLE=y

Wyświetl plik

@ -0,0 +1 @@
CONFIG_LWIP_ENABLE=y