Как настроить диапазон для аренды IP-адреса DHCP в WiFi softAP ()? - PullRequest
0 голосов
/ 20 апреля 2019

Я пытаюсь создать ячеистую сеть, используя модуль ESP32. WiFi.h softAPConfig () можно использовать для установки начального адреса для аренды, но он прогрессирует вверх без повторного использования уже арендованных адресов, которые больше не используются. Поэтому я хочу ограничить диапазон аренды между двумя адресами

I found this piece of code from dhcpserver.h 
/*   Defined in esp_misc.h */
    typedef struct {
    bool enable;
    ip4_addr_t start_ip;
    ip4_addr_t end_ip;
} dhcps_lease_t;

Это код, который я скомпилировал и загрузил в модуль ESP32

#include "WiFi.h"

char *ssid = "AirMesh";
IPAddress local_IP(192,168,1,0);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);

void setup()
{
  Serial.begin(9600);
  Serial.println();

  Serial.print("Setting soft-AP configuration ... ");
  Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!");

  Serial.print("Setting soft-AP ... ");
  Serial.println(WiFi.softAP("ESPsoftAP_01") ? "Ready" : "Failed!");

  Serial.print("Soft-AP IP address = ");
  Serial.println(WiFi.softAPIP());

  WiFi.softAP(ssid);
}

void loop() {}

Первое устройство при подключении дает IP 192.168.1.1, второе устройство - IP 192.168.1.2, когда я отключаю первое устройство и снова подключаю его, и оно дает IP 192.168.1.3 (каждое соединение использует разные физические адреса) Эта прогрессия продолжается

EDIT: Я думаю, что после его поиска я нашел код, отвечающий за диапазон IP-лизинга, но не смог понять, что это значит.

lease.start_ip.addr = static_cast<uint32_t>(local_ip) + (1 << 24);
lease.end_ip.addr = static_cast<uint32_t>(local_ip) + (11 << 24);

1 Ответ

0 голосов
/ 21 апреля 2019

После метадов проб и ошибок мне удалось найти ответ Измените код в файле WiFiAP.cpp (я разветвился и запросил выборку, заменив 11 на 10, так как максимальное количество возможных соединений для ESP32 равно 10)

lease.start_ip.addr = static_cast<uint32_t>(local_ip) + (1 << 24);
lease.end_ip.addr = static_cast<uint32_t>(local_ip) + (n << 24);

Где n - количество IP-адресов, которые должны быть выделены для внешних устройств. Например: -

lease.end_ip.addr = static_cast<uint32_t>(local_ip) + (20 << 24);

означает, что если начальный IP-адрес 192.168.1.0, DHCP назначит адрес, начиная с 192.168.1.1 до 192.168.1.20, а 192.168.1.0 (начальный IP-адрес будет адресом модуля ESP32)

...