From ce2cd111a150ca87ab733ae434d77962a7efe96f Mon Sep 17 00:00:00 2001 From: Rodrigo Garcia Date: Fri, 29 Apr 2022 05:13:07 -0300 Subject: [PATCH] Fixes INADDR_NONE (#6659) Description of Change Fixes IPAddress INADDR_NONE declaration when using Arduino WiFi or ETH. This symbol was defined as 0xffffffff by lwip /inet.h, making it impossible to use INADDR_NONE correctly. This PR only works when has a modification to include instead of . This will be done directly to the sdk folder in the github structure and it has been fixed in IDF by a separated Merge Request. This will be reflected in the future, for good. Tests scenarios This PR was tested with all Arduino WiFi examples, including AsyncUDP. Also with ETH examples. It was also tested for #6610 test cases. Testing done for ESP32, ESP32-S2, ESP32-C3 and ESP32-S3. Related links fixes #6610 fixes #6247 fixes #4732 --- cores/esp32/IPAddress.cpp | 3 +++ cores/esp32/IPAddress.h | 4 ++-- libraries/AsyncUDP/src/AsyncUDP.h | 1 - libraries/WiFi/src/WiFiServer.h | 4 ++-- .../wifi_provisioning/include/wifi_provisioning/wifi_config.h | 2 +- .../wifi_provisioning/include/wifi_provisioning/wifi_config.h | 2 +- .../wifi_provisioning/include/wifi_provisioning/wifi_config.h | 2 +- .../wifi_provisioning/include/wifi_provisioning/wifi_config.h | 2 +- 8 files changed, 11 insertions(+), 9 deletions(-) diff --git a/cores/esp32/IPAddress.cpp b/cores/esp32/IPAddress.cpp index cabfdf32d..0575363f2 100644 --- a/cores/esp32/IPAddress.cpp +++ b/cores/esp32/IPAddress.cpp @@ -120,3 +120,6 @@ bool IPAddress::fromString(const char *address) _address.bytes[3] = acc; return true; } + +// declared one time - as external in IPAddress.h +IPAddress INADDR_NONE(0, 0, 0, 0); diff --git a/cores/esp32/IPAddress.h b/cores/esp32/IPAddress.h index aa1d10cee..3bedd4f87 100644 --- a/cores/esp32/IPAddress.h +++ b/cores/esp32/IPAddress.h @@ -91,6 +91,6 @@ public: friend class DNSClient; }; -const IPAddress INADDR_NONE(0, 0, 0, 0); - +// changed to extern because const declaration creates copies in BSS of INADDR_NONE for each CPP unit that includes it +extern IPAddress INADDR_NONE; #endif diff --git a/libraries/AsyncUDP/src/AsyncUDP.h b/libraries/AsyncUDP/src/AsyncUDP.h index 95e0b8c13..be04c01ff 100644 --- a/libraries/AsyncUDP/src/AsyncUDP.h +++ b/libraries/AsyncUDP/src/AsyncUDP.h @@ -7,7 +7,6 @@ #include "Stream.h" #include extern "C" { -#include "lwip/ip_addr.h" #include "esp_netif.h" #include "freertos/queue.h" #include "freertos/semphr.h" diff --git a/libraries/WiFi/src/WiFiServer.h b/libraries/WiFi/src/WiFiServer.h index f5b7eaa7b..346986aba 100644 --- a/libraries/WiFi/src/WiFiServer.h +++ b/libraries/WiFi/src/WiFiServer.h @@ -22,7 +22,6 @@ #include "Arduino.h" #include "Server.h" #include "WiFiClient.h" -#include "arpa/inet.h" #include "IPAddress.h" class WiFiServer : public Server { @@ -38,7 +37,8 @@ class WiFiServer : public Server { public: void listenOnLocalhost(){} - WiFiServer(uint16_t port=80, uint8_t max_clients=4):sockfd(-1),_accepted_sockfd(-1),_addr(INADDR_ANY),_port(port),_max_clients(max_clients),_listening(false),_noDelay(false) { + // _addr(INADDR_ANY) is the same as _addr() ==> 0.0.0.0 + WiFiServer(uint16_t port=80, uint8_t max_clients=4):sockfd(-1),_accepted_sockfd(-1),_addr(),_port(port),_max_clients(max_clients),_listening(false),_noDelay(false) { log_v("WiFiServer::WiFiServer(port=%d, ...)", port); } WiFiServer(const IPAddress& addr, uint16_t port=80, uint8_t max_clients=4):sockfd(-1),_accepted_sockfd(-1),_addr(addr),_port(port),_max_clients(max_clients),_listening(false),_noDelay(false) { diff --git a/tools/sdk/esp32/include/wifi_provisioning/include/wifi_provisioning/wifi_config.h b/tools/sdk/esp32/include/wifi_provisioning/include/wifi_provisioning/wifi_config.h index 2fa64448d..d477580fa 100644 --- a/tools/sdk/esp32/include/wifi_provisioning/include/wifi_provisioning/wifi_config.h +++ b/tools/sdk/esp32/include/wifi_provisioning/include/wifi_provisioning/wifi_config.h @@ -15,7 +15,7 @@ #ifndef _WIFI_PROV_CONFIG_H_ #define _WIFI_PROV_CONFIG_H_ -#include +#include #ifdef __cplusplus extern "C" { diff --git a/tools/sdk/esp32c3/include/wifi_provisioning/include/wifi_provisioning/wifi_config.h b/tools/sdk/esp32c3/include/wifi_provisioning/include/wifi_provisioning/wifi_config.h index 2fa64448d..d477580fa 100644 --- a/tools/sdk/esp32c3/include/wifi_provisioning/include/wifi_provisioning/wifi_config.h +++ b/tools/sdk/esp32c3/include/wifi_provisioning/include/wifi_provisioning/wifi_config.h @@ -15,7 +15,7 @@ #ifndef _WIFI_PROV_CONFIG_H_ #define _WIFI_PROV_CONFIG_H_ -#include +#include #ifdef __cplusplus extern "C" { diff --git a/tools/sdk/esp32s2/include/wifi_provisioning/include/wifi_provisioning/wifi_config.h b/tools/sdk/esp32s2/include/wifi_provisioning/include/wifi_provisioning/wifi_config.h index 2fa64448d..d477580fa 100644 --- a/tools/sdk/esp32s2/include/wifi_provisioning/include/wifi_provisioning/wifi_config.h +++ b/tools/sdk/esp32s2/include/wifi_provisioning/include/wifi_provisioning/wifi_config.h @@ -15,7 +15,7 @@ #ifndef _WIFI_PROV_CONFIG_H_ #define _WIFI_PROV_CONFIG_H_ -#include +#include #ifdef __cplusplus extern "C" { diff --git a/tools/sdk/esp32s3/include/wifi_provisioning/include/wifi_provisioning/wifi_config.h b/tools/sdk/esp32s3/include/wifi_provisioning/include/wifi_provisioning/wifi_config.h index 2fa64448d..d477580fa 100644 --- a/tools/sdk/esp32s3/include/wifi_provisioning/include/wifi_provisioning/wifi_config.h +++ b/tools/sdk/esp32s3/include/wifi_provisioning/include/wifi_provisioning/wifi_config.h @@ -15,7 +15,7 @@ #ifndef _WIFI_PROV_CONFIG_H_ #define _WIFI_PROV_CONFIG_H_ -#include +#include #ifdef __cplusplus extern "C" { -- GitLab