diff --git a/libraries/WiFi/src/WiFiAP.cpp b/libraries/WiFi/src/WiFiAP.cpp index 8201d4634d9dbc14c4525ffba38aa31ce33ea0ae..2ef68ff53b076a55714ae2a4703b5f67e33ba460 100644 --- a/libraries/WiFi/src/WiFiAP.cpp +++ b/libraries/WiFi/src/WiFiAP.cpp @@ -205,23 +205,7 @@ bool WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress } err = set_esp_interface_ip(ESP_IF_WIFI_AP, local_ip, gateway, subnet); - - // testing effectiveness of the operation beyond internal DHCP Client process - esp_netif_ip_info_t ip; - if(esp_netif_get_ip_info(get_esp_interface_netif(ESP_IF_WIFI_AP), &ip) != ESP_OK){ - log_e("Netif Get IP Failed!"); - return false; - } - bool ip_ok = IPAddress(ip.ip.addr) == local_ip; - bool gw_ok = IPAddress(ip.gw.addr) == gateway; - bool mk_ok = IPAddress(ip.netmask.addr) == subnet; - - if (ip_ok && gw_ok && mk_ok) { - return true; - } else { - log_e("Failed setting: %s %s %s", ip_ok ? "" : "Static IP", gw_ok ? "" : "- Gateway", mk_ok ? "" : "- Netmask"); - return false; - } + return err == ESP_OK; } diff --git a/libraries/WiFi/src/WiFiGeneric.cpp b/libraries/WiFi/src/WiFiGeneric.cpp index 3c7d23300949a641f73a6eca25f118d4707c46c2..5d31341481a7d249511d7b80c00c535b68105237 100644 --- a/libraries/WiFi/src/WiFiGeneric.cpp +++ b/libraries/WiFi/src/WiFiGeneric.cpp @@ -138,9 +138,20 @@ esp_err_t set_esp_interface_ip(esp_interface_t interface, IPAddress local_ip=IPA dhcps_lease_t lease; lease.enable = true; - lease.start_ip.addr = static_cast(local_ip) + (1 << 24); - lease.end_ip.addr = static_cast(local_ip) + (11 << 24); - + uint32_t dhcp_ipaddr = static_cast(local_ip); + // prevents DHCP lease range to overflow subnet/24 range + // there will be 11 addresses for DHCP to lease + uint8_t leaseStart = (uint8_t)(~subnet[3] - 12); + if ((local_ip[3]) < leaseStart) { + lease.start_ip.addr = dhcp_ipaddr + (1 << 24); + lease.end_ip.addr = dhcp_ipaddr + (11 << 24); + } else { + // make range stay in the begining of the netmask range + dhcp_ipaddr = (dhcp_ipaddr & 0x00FFFFFF); + lease.start_ip.addr = dhcp_ipaddr + (1 << 24); + lease.end_ip.addr = dhcp_ipaddr + (11 << 24); + } + log_v("DHCP Server Range: %s to %s", IPAddress(lease.start_ip.addr).toString(), IPAddress(lease.end_ip.addr).toString()); err = tcpip_adapter_dhcps_option( (tcpip_adapter_dhcp_option_mode_t)TCPIP_ADAPTER_OP_SET, (tcpip_adapter_dhcp_option_id_t)REQUESTED_IP_ADDRESS,