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 cabfdf32..0575363f 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 aa1d10ce..3bedd4f8 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 95e0b8c1..be04c01f 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 f5b7eaa7..346986ab 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 2fa64448..d477580f 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 2fa64448..d477580f 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 2fa64448..d477580f 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 2fa64448..d477580f 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" {