mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-19 23:22:16 +03:00
Initialize SoftAP DhcpServer object on demand (#8546)
* Initialize SoftAP DhcpServer object on demand Remove dependency on global ctor, and just construct the object when someone asks us to do it. Only dependency right now is netif_git, which is expected to be initialized by the lwip code some time before dhcps_start happens. Removing ip_info from begin(), since we never reference later on. Also removing the specific check for netif id and simplify the ctors. Update tests and recover old nonos-sdk dhcps functions that were not implemented. * nonos helpers have a separate header * wifi ap needs this anyway, simplify sketch includes * missing example * existing name :/ * trying to fix header dependency * restyle * not a c header * no need to init * move dhcp server getter to WiFi more... arduino'ish? we ahve object as namespace, plus everything else related to softAP is there redundant includes, redundant mock impl (out-of-scope here to fix) * ...move things back, still expose as WiFi method * review fix * include -nonos header in wifi lib though * no more lwip include * style * need mock dhcpserver instance
This commit is contained in:
parent
61e7605549
commit
502d9469fa
@ -1,63 +1,95 @@
|
|||||||
/*
|
/*
|
||||||
lwIPDhcpServer-NonOS.cpp - DHCP server wrapper
|
NonOS DHCP server helpers
|
||||||
|
|
||||||
Copyright (c) 2020 esp8266 arduino. All rights reserved.
|
Copyright (c) 2020-2022 esp8266 arduino. All rights reserved.
|
||||||
This file is part of the esp8266 core for Arduino environment.
|
This file is part of the esp8266 core for Arduino environment.
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
This library is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU Lesser General Public
|
modify it under the terms of the GNU Lesser General Public
|
||||||
License as published by the Free Software Foundation; either
|
License as published by the Free Software Foundation; either
|
||||||
version 2.1 of the License, or (at your option) any later version.
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
This library is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
Lesser General Public License for more details.
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
You should have received a copy of the GNU Lesser General Public
|
||||||
License along with this library; if not, write to the Free Software
|
License along with this library; if not, write to the Free Software
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// STARTS/STOPS DHCP SERVER ON WIFI AP INTERFACE
|
#include "LwipDhcpServer-NonOS.h"
|
||||||
// these functions must exists as-is with "C" interface,
|
|
||||||
// nonos-sdk calls them at boot time and later
|
|
||||||
|
|
||||||
#include <lwip/init.h> // LWIP_VERSION
|
|
||||||
|
|
||||||
|
#include <lwip/init.h>
|
||||||
#include <lwip/netif.h>
|
#include <lwip/netif.h>
|
||||||
#include "LwipDhcpServer.h"
|
|
||||||
|
|
||||||
extern netif netif_git[2];
|
// Global static DHCP instance for softAP interface
|
||||||
|
// (since the netif object never goes away, even when AP is disabled)
|
||||||
// global DHCP instance for softAP interface
|
// Initial version fully emulates nonos-sdk api in DhcpServer class,
|
||||||
DhcpServer dhcpSoftAP(&netif_git[SOFTAP_IF]);
|
// before trying to further change it and possibly break legacy behaviour
|
||||||
|
DhcpServer& getNonOSDhcpServer()
|
||||||
|
{
|
||||||
|
extern netif netif_git[2];
|
||||||
|
static DhcpServer server(&netif_git[SOFTAP_IF]);
|
||||||
|
return server;
|
||||||
|
}
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
void dhcps_start(struct ip_info* info, netif* apnetif)
|
// `ip_info` is useless, since we get the information from the netif directly
|
||||||
|
// `netif` would be netif_git[SOFTAP_IF], which we get from the lwip2 glue
|
||||||
|
void dhcps_start(ip_info*, netif*)
|
||||||
{
|
{
|
||||||
// apnetif is esp interface, replaced by lwip2's
|
auto& server = getNonOSDhcpServer();
|
||||||
// netif_git[SOFTAP_IF] interface in constructor
|
if (!server.isRunning())
|
||||||
(void)apnetif;
|
{
|
||||||
|
server.begin();
|
||||||
#if 0
|
}
|
||||||
// can't use C++ now, global ctors are not initialized yet
|
|
||||||
dhcpSoftAP.begin(info);
|
|
||||||
#else
|
|
||||||
(void)info;
|
|
||||||
// initial version: emulate nonos-sdk in DhcpServer class before
|
|
||||||
// trying to change legacy behavor
|
|
||||||
// `fw_has_started_softap_dhcps` will be read in DhcpServer::DhcpServer
|
|
||||||
// which is called when c++ ctors are initialized, specifically
|
|
||||||
// dhcpSoftAP initialized with AP interface number above.
|
|
||||||
fw_has_started_softap_dhcps = 1;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void dhcps_stop()
|
void dhcps_stop()
|
||||||
{
|
{
|
||||||
dhcpSoftAP.end();
|
auto& server = getNonOSDhcpServer();
|
||||||
|
if (server.isRunning())
|
||||||
|
{
|
||||||
|
server.end();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// providing the rest of the nonos-sdk API, which was originally removed in 3.0.0
|
||||||
|
|
||||||
|
bool wifi_softap_set_dhcps_lease(dhcps_lease* please)
|
||||||
|
{
|
||||||
|
auto& server = getNonOSDhcpServer();
|
||||||
|
return server.set_dhcps_lease(please);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wifi_softap_get_dhcps_lease(dhcps_lease* please)
|
||||||
|
{
|
||||||
|
auto& server = getNonOSDhcpServer();
|
||||||
|
return server.get_dhcps_lease(please);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 wifi_softap_get_dhcps_lease_time()
|
||||||
|
{
|
||||||
|
auto& server = getNonOSDhcpServer();
|
||||||
|
return server.get_dhcps_lease_time();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wifi_softap_set_dhcps_lease_time(uint32 minutes)
|
||||||
|
{
|
||||||
|
auto& server = getNonOSDhcpServer();
|
||||||
|
return server.set_dhcps_lease_time(minutes);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wifi_softap_reset_dhcps_lease_time()
|
||||||
|
{
|
||||||
|
auto& server = getNonOSDhcpServer();
|
||||||
|
return server.reset_dhcps_lease_time();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wifi_softap_add_dhcps_lease(uint8* macaddr)
|
||||||
|
{
|
||||||
|
auto& server = getNonOSDhcpServer();
|
||||||
|
return server.add_dhcps_lease(macaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // extern "C"
|
} // extern "C"
|
||||||
|
24
cores/esp8266/LwipDhcpServer-NonOS.h
Normal file
24
cores/esp8266/LwipDhcpServer-NonOS.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
NonOS DHCP server helpers
|
||||||
|
|
||||||
|
Copyright (c) 2020-2022 esp8266 arduino. All rights reserved.
|
||||||
|
This file is part of the esp8266 core for Arduino environment.
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with this library; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "LwipDhcpServer.h"
|
||||||
|
|
||||||
|
// Global static DHCP instance for softAP interface
|
||||||
|
DhcpServer& getNonOSDhcpServer();
|
@ -36,8 +36,6 @@
|
|||||||
|
|
||||||
#include <lwip/init.h> // LWIP_VERSION
|
#include <lwip/init.h> // LWIP_VERSION
|
||||||
|
|
||||||
#define DHCPS_LEASE_TIME_DEF (120)
|
|
||||||
|
|
||||||
#define USE_DNS
|
#define USE_DNS
|
||||||
|
|
||||||
#include "lwip/inet.h"
|
#include "lwip/inet.h"
|
||||||
@ -166,7 +164,7 @@ const char mem_debug_file[] ICACHE_RODATA_ATTR = __FILE__;
|
|||||||
int ret = 1, errval = (err); \
|
int ret = 1, errval = (err); \
|
||||||
if (errval != ERR_OK) \
|
if (errval != ERR_OK) \
|
||||||
{ \
|
{ \
|
||||||
os_printf("DHCPS ERROR: %s (lwip:%d)\n", what, errval); \
|
os_printf("DHCPS ERROR: %s (lwip:%s(%d))\n", what, lwip_strerr(errval), errval); \
|
||||||
ret = 0; \
|
ret = 0; \
|
||||||
} \
|
} \
|
||||||
ret; \
|
ret; \
|
||||||
@ -175,36 +173,9 @@ const char mem_debug_file[] ICACHE_RODATA_ATTR = __FILE__;
|
|||||||
#define LWIP_IS_OK(what, err) ((err) == ERR_OK)
|
#define LWIP_IS_OK(what, err) ((err) == ERR_OK)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const uint32 DhcpServer::magic_cookie = 0x63538263; // https://tools.ietf.org/html/rfc1497
|
|
||||||
|
|
||||||
int fw_has_started_softap_dhcps = 0;
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
DhcpServer::DhcpServer(netif* netif) : _netif(netif)
|
DhcpServer::DhcpServer(netif* netif) : _netif(netif) { }
|
||||||
{
|
|
||||||
pcb_dhcps = nullptr;
|
|
||||||
dns_address.addr = 0;
|
|
||||||
plist = nullptr;
|
|
||||||
offer = 0xFF;
|
|
||||||
renew = false;
|
|
||||||
dhcps_lease_time = DHCPS_LEASE_TIME_DEF; // minute
|
|
||||||
|
|
||||||
if (netif->num == SOFTAP_IF && fw_has_started_softap_dhcps == 1)
|
|
||||||
{
|
|
||||||
// When nonos-sdk starts DHCPS at boot:
|
|
||||||
// 1. `fw_has_started_softap_dhcps` is already initialized to 1
|
|
||||||
// 2. global ctor DhcpServer's `dhcpSoftAP(&netif_git[SOFTAP_IF])` is called
|
|
||||||
// 3. (that's here) => begin(legacy-values) is called
|
|
||||||
ip_info ip = {
|
|
||||||
{ 0x0104a8c0 }, // IP 192.168.4.1
|
|
||||||
{ 0x00ffffff }, // netmask 255.255.255.0
|
|
||||||
{ 0 } // gateway 0.0.0.0
|
|
||||||
};
|
|
||||||
begin(&ip);
|
|
||||||
fw_has_started_softap_dhcps = 2; // not 1, ending initial boot sequence
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// wifi_softap_set_station_info is missing in user_interface.h:
|
// wifi_softap_set_station_info is missing in user_interface.h:
|
||||||
extern "C" void wifi_softap_set_station_info(uint8_t* mac, struct ipv4_addr*);
|
extern "C" void wifi_softap_set_station_info(uint8_t* mac, struct ipv4_addr*);
|
||||||
@ -516,7 +487,7 @@ void DhcpServer::create_msg(struct dhcps_msg* m)
|
|||||||
memset((char*)m->sname, 0, sizeof(m->sname));
|
memset((char*)m->sname, 0, sizeof(m->sname));
|
||||||
memset((char*)m->file, 0, sizeof(m->file));
|
memset((char*)m->file, 0, sizeof(m->file));
|
||||||
memset((char*)m->options, 0, sizeof(m->options));
|
memset((char*)m->options, 0, sizeof(m->options));
|
||||||
memcpy((char*)m->options, &magic_cookie, sizeof(magic_cookie));
|
memcpy((char*)m->options, &MagicCookie, sizeof(MagicCookie));
|
||||||
}
|
}
|
||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
/*
|
/*
|
||||||
@ -821,7 +792,7 @@ uint8_t DhcpServer::parse_options(uint8_t* optptr, sint16_t len)
|
|||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
sint16_t DhcpServer::parse_msg(struct dhcps_msg* m, u16_t len)
|
sint16_t DhcpServer::parse_msg(struct dhcps_msg* m, u16_t len)
|
||||||
{
|
{
|
||||||
if (memcmp((char*)m->options, &magic_cookie, sizeof(magic_cookie)) == 0)
|
if (memcmp((char*)m->options, &MagicCookie, sizeof(MagicCookie)) == 0)
|
||||||
{
|
{
|
||||||
struct ipv4_addr ip;
|
struct ipv4_addr ip;
|
||||||
memcpy(&ip.addr, m->ciaddr, sizeof(ip.addr));
|
memcpy(&ip.addr, m->ciaddr, sizeof(ip.addr));
|
||||||
@ -1008,7 +979,7 @@ void DhcpServer::init_dhcps_lease(uint32 ip)
|
|||||||
}
|
}
|
||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
bool DhcpServer::begin(struct ip_info* info)
|
bool DhcpServer::begin()
|
||||||
{
|
{
|
||||||
if (pcb_dhcps != nullptr)
|
if (pcb_dhcps != nullptr)
|
||||||
{
|
{
|
||||||
@ -1016,9 +987,11 @@ bool DhcpServer::begin(struct ip_info* info)
|
|||||||
}
|
}
|
||||||
|
|
||||||
pcb_dhcps = udp_new();
|
pcb_dhcps = udp_new();
|
||||||
if (pcb_dhcps == nullptr || info == nullptr)
|
if (pcb_dhcps == nullptr)
|
||||||
{
|
{
|
||||||
|
#if DHCPS_DEBUG
|
||||||
os_printf("dhcps_start(): could not obtain pcb\n");
|
os_printf("dhcps_start(): could not obtain pcb\n");
|
||||||
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1030,7 +1003,7 @@ bool DhcpServer::begin(struct ip_info* info)
|
|||||||
ip_2_ip4(&broadcast_dhcps)->addr |= ~ip_2_ip4(&_netif->netmask)->addr;
|
ip_2_ip4(&broadcast_dhcps)->addr |= ~ip_2_ip4(&_netif->netmask)->addr;
|
||||||
// XXXFIXMEIPV6 broadcast address?
|
// XXXFIXMEIPV6 broadcast address?
|
||||||
|
|
||||||
server_address = info->ip;
|
server_address = *ip_2_ip4(&_netif->ip_addr);
|
||||||
init_dhcps_lease(server_address.addr);
|
init_dhcps_lease(server_address.addr);
|
||||||
|
|
||||||
udp_bind(pcb_dhcps, IP_ADDR_ANY, DHCPS_SERVER_PORT);
|
udp_bind(pcb_dhcps, IP_ADDR_ANY, DHCPS_SERVER_PORT);
|
||||||
@ -1040,12 +1013,6 @@ bool DhcpServer::begin(struct ip_info* info)
|
|||||||
"pcb_dhcps\n");
|
"pcb_dhcps\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (_netif->num == SOFTAP_IF)
|
|
||||||
{
|
|
||||||
wifi_set_ip_info(SOFTAP_IF, info); // added for lwip-git, not sure whether useful
|
|
||||||
}
|
|
||||||
_netif->flags |= NETIF_FLAG_UP | NETIF_FLAG_LINK_UP; // added for lwip-git
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1091,9 +1058,9 @@ void DhcpServer::end()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DhcpServer::isRunning()
|
bool DhcpServer::isRunning() const
|
||||||
{
|
{
|
||||||
return !!_netif->state;
|
return pcb_dhcps != nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
@ -1342,7 +1309,7 @@ bool DhcpServer::reset_dhcps_lease_time(void)
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
dhcps_lease_time = DHCPS_LEASE_TIME_DEF;
|
dhcps_lease_time = DefaultLeaseTime;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,22 +28,24 @@
|
|||||||
// nearly as-is. This is an initial version to guaranty legacy behavior
|
// nearly as-is. This is an initial version to guaranty legacy behavior
|
||||||
// with same default values.
|
// with same default values.
|
||||||
|
|
||||||
#ifndef __DHCPS_H__
|
#pragma once
|
||||||
#define __DHCPS_H__
|
|
||||||
|
|
||||||
#include <lwip/init.h> // LWIP_VERSION
|
#include <lwip/init.h> // LWIP_VERSION
|
||||||
|
|
||||||
class DhcpServer
|
class DhcpServer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DhcpServer(netif* netif);
|
static constexpr int DefaultLeaseTime = 720; // minutes
|
||||||
|
static constexpr uint32 MagicCookie = 0x63538263; // https://tools.ietf.org/html/rfc1497
|
||||||
|
|
||||||
|
DhcpServer(netif*);
|
||||||
~DhcpServer();
|
~DhcpServer();
|
||||||
|
|
||||||
void setDns(int num, const ipv4_addr_t* dns);
|
void setDns(int num, const ipv4_addr_t* dns);
|
||||||
|
|
||||||
bool begin(ip_info* info);
|
bool begin();
|
||||||
void end();
|
void end();
|
||||||
bool isRunning();
|
bool isRunning() const;
|
||||||
|
|
||||||
// this is the C interface encapsulated in a class
|
// this is the C interface encapsulated in a class
|
||||||
// (originally dhcpserver.c in lwIP-v1.4 in NonOS-SDK)
|
// (originally dhcpserver.c in lwIP-v1.4 in NonOS-SDK)
|
||||||
@ -91,25 +93,17 @@ protected:
|
|||||||
void dhcps_client_leave(u8* bssid, struct ipv4_addr* ip, bool force);
|
void dhcps_client_leave(u8* bssid, struct ipv4_addr* ip, bool force);
|
||||||
uint32 dhcps_client_update(u8* bssid, struct ipv4_addr* ip);
|
uint32 dhcps_client_update(u8* bssid, struct ipv4_addr* ip);
|
||||||
|
|
||||||
netif* _netif;
|
netif* _netif = nullptr;
|
||||||
|
|
||||||
struct udp_pcb* pcb_dhcps;
|
udp_pcb* pcb_dhcps = nullptr;
|
||||||
ip_addr_t broadcast_dhcps;
|
ip_addr_t broadcast_dhcps {};
|
||||||
struct ipv4_addr server_address;
|
ipv4_addr server_address {};
|
||||||
struct ipv4_addr client_address;
|
ipv4_addr client_address {};
|
||||||
struct ipv4_addr dns_address;
|
ipv4_addr dns_address {};
|
||||||
uint32 dhcps_lease_time;
|
uint32 dhcps_lease_time = DefaultLeaseTime;
|
||||||
|
|
||||||
struct dhcps_lease dhcps_lease;
|
struct dhcps_lease dhcps_lease;
|
||||||
list_node* plist;
|
list_node* plist;
|
||||||
uint8 offer;
|
uint8 offer;
|
||||||
bool renew;
|
bool renew;
|
||||||
|
|
||||||
static const uint32 magic_cookie;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// SoftAP DHCP server always exists and is started on boot
|
|
||||||
extern DhcpServer dhcpSoftAP;
|
|
||||||
extern "C" int fw_has_started_softap_dhcps;
|
|
||||||
|
|
||||||
#endif // __DHCPS_H__
|
|
||||||
|
@ -74,7 +74,6 @@
|
|||||||
#include <ESP8266WiFi.h>
|
#include <ESP8266WiFi.h>
|
||||||
#include <lwip/napt.h>
|
#include <lwip/napt.h>
|
||||||
#include <lwip/dns.h>
|
#include <lwip/dns.h>
|
||||||
#include <dhcpserver.h>
|
|
||||||
#include <WiFiClient.h>
|
#include <WiFiClient.h>
|
||||||
#include <ESP8266WebServer.h>
|
#include <ESP8266WebServer.h>
|
||||||
#include <DNSServer.h>
|
#include <DNSServer.h>
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
#include <ESP8266WiFi.h>
|
#include <ESP8266WiFi.h>
|
||||||
#include <lwip/napt.h>
|
#include <lwip/napt.h>
|
||||||
#include <lwip/dns.h>
|
#include <lwip/dns.h>
|
||||||
#include <LwipDhcpServer.h>
|
|
||||||
|
|
||||||
#define NAPT 1000
|
#define NAPT 1000
|
||||||
#define NAPT_PORT 10
|
#define NAPT_PORT 10
|
||||||
@ -54,8 +53,9 @@ void setup() {
|
|||||||
Serial.printf("\nSTA: %s (dns: %s / %s)\n", WiFi.localIP().toString().c_str(), WiFi.dnsIP(0).toString().c_str(), WiFi.dnsIP(1).toString().c_str());
|
Serial.printf("\nSTA: %s (dns: %s / %s)\n", WiFi.localIP().toString().c_str(), WiFi.dnsIP(0).toString().c_str(), WiFi.dnsIP(1).toString().c_str());
|
||||||
|
|
||||||
// give DNS servers to AP side
|
// give DNS servers to AP side
|
||||||
dhcpSoftAP.dhcps_set_dns(0, WiFi.dnsIP(0));
|
auto& server = WiFi.softAPDhcpServer();
|
||||||
dhcpSoftAP.dhcps_set_dns(1, WiFi.dnsIP(1));
|
server.dhcps_set_dns(0, WiFi.dnsIP(0));
|
||||||
|
server.dhcps_set_dns(1, WiFi.dnsIP(1));
|
||||||
|
|
||||||
WiFi.softAPConfig( // enable AP, with android-compatible google domain
|
WiFi.softAPConfig( // enable AP, with android-compatible google domain
|
||||||
IPAddress(172, 217, 28, 254), IPAddress(172, 217, 28, 254), IPAddress(255, 255, 255, 0));
|
IPAddress(172, 217, 28, 254), IPAddress(172, 217, 28, 254), IPAddress(255, 255, 255, 0));
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
#include <ESP8266WiFi.h>
|
#include <ESP8266WiFi.h>
|
||||||
#include <WiFiClient.h>
|
#include <WiFiClient.h>
|
||||||
#include <ESP8266WebServer.h>
|
#include <ESP8266WebServer.h>
|
||||||
#include <LwipDhcpServer.h>
|
|
||||||
|
|
||||||
/* Set these to your desired credentials. */
|
/* Set these to your desired credentials. */
|
||||||
const char *ssid = "ESPap";
|
const char *ssid = "ESPap";
|
||||||
@ -76,8 +75,9 @@ void setup() {
|
|||||||
...
|
...
|
||||||
any client not listed will use next IP address available from the range (here 192.168.0.102 and more)
|
any client not listed will use next IP address available from the range (here 192.168.0.102 and more)
|
||||||
*/
|
*/
|
||||||
dhcpSoftAP.add_dhcps_lease(mac_CAM); // always 192.168.0.100
|
auto &dhcpServer = WiFi.softAPDhcpServer();
|
||||||
dhcpSoftAP.add_dhcps_lease(mac_PC); // always 192.168.0.101
|
dhcpServer.add_dhcps_lease(mac_CAM); // always 192.168.0.100
|
||||||
|
dhcpServer.add_dhcps_lease(mac_PC); // always 192.168.0.101
|
||||||
/* Start Access Point. You can remove the password parameter if you want the AP to be open. */
|
/* Start Access Point. You can remove the password parameter if you want the AP to be open. */
|
||||||
WiFi.softAP(ssid, password);
|
WiFi.softAP(ssid, password);
|
||||||
Serial.print("AP IP address: ");
|
Serial.print("AP IP address: ");
|
||||||
|
@ -26,6 +26,8 @@
|
|||||||
#include "ESP8266WiFiGeneric.h"
|
#include "ESP8266WiFiGeneric.h"
|
||||||
#include "ESP8266WiFiAP.h"
|
#include "ESP8266WiFiAP.h"
|
||||||
|
|
||||||
|
#include <LwipDhcpServer-NonOS.h>
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include "c_types.h"
|
#include "c_types.h"
|
||||||
#include "ets_sys.h"
|
#include "ets_sys.h"
|
||||||
@ -37,7 +39,6 @@ extern "C" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "LwipDhcpServer.h"
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------------------------------------------
|
||||||
// ---------------------------------------------------- Private functions ------------------------------------------------
|
// ---------------------------------------------------- Private functions ------------------------------------------------
|
||||||
@ -166,16 +167,18 @@ bool ESP8266WiFiAPClass::softAP(const char* ssid, const char* psk, int channel,
|
|||||||
DEBUG_WIFI("[AP] softap config unchanged\n");
|
DEBUG_WIFI("[AP] softap config unchanged\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
dhcpSoftAP.end();
|
auto& server = softAPDhcpServer();
|
||||||
|
server.end();
|
||||||
|
|
||||||
// check IP config
|
// check IP config
|
||||||
struct ip_info ip;
|
struct ip_info ip;
|
||||||
if(wifi_get_ip_info(SOFTAP_IF, &ip)) {
|
if(wifi_get_ip_info(SOFTAP_IF, &ip)) {
|
||||||
if(ip.ip.addr == 0x00000000) {
|
if(ip.ip.addr == 0x00000000) {
|
||||||
// Invalid config
|
|
||||||
DEBUG_WIFI("[AP] IP config Invalid resetting...\n");
|
DEBUG_WIFI("[AP] IP config Invalid resetting...\n");
|
||||||
//192.168.4.1 , 192.168.4.1 , 255.255.255.0
|
ret = softAPConfig(
|
||||||
ret = softAPConfig(0x0104A8C0, 0x0104A8C0, 0x00FFFFFF);
|
0x0104A8C0 /* 192.168.4.1 */,
|
||||||
|
0x0104A8C0 /* 192.168.4.1 */,
|
||||||
|
0x00FFFFFF /* 255.255.255.0 */);
|
||||||
if(!ret) {
|
if(!ret) {
|
||||||
DEBUG_WIFI("[AP] softAPConfig failed!\n");
|
DEBUG_WIFI("[AP] softAPConfig failed!\n");
|
||||||
ret = false;
|
ret = false;
|
||||||
@ -186,7 +189,7 @@ bool ESP8266WiFiAPClass::softAP(const char* ssid, const char* psk, int channel,
|
|||||||
ret = false;
|
ret = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
dhcpSoftAP.begin(&ip);
|
server.begin();
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -244,21 +247,15 @@ bool ESP8266WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPA
|
|||||||
dhcp_lease.end_ip.addr = ip.v4();
|
dhcp_lease.end_ip.addr = ip.v4();
|
||||||
DEBUG_WIFI("[APConfig] DHCP IP end: %s\n", ip.toString().c_str());
|
DEBUG_WIFI("[APConfig] DHCP IP end: %s\n", ip.toString().c_str());
|
||||||
|
|
||||||
if(!dhcpSoftAP.set_dhcps_lease(&dhcp_lease))
|
auto& server = softAPDhcpServer();
|
||||||
|
if(!server.set_dhcps_lease(&dhcp_lease))
|
||||||
{
|
{
|
||||||
DEBUG_WIFI("[APConfig] wifi_set_ip_info failed!\n");
|
DEBUG_WIFI("[APConfig] wifi_set_ip_info failed!\n");
|
||||||
ret = false;
|
ret = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// set lease time to 720min --> 12h
|
|
||||||
if(!dhcpSoftAP.set_dhcps_lease_time(720))
|
|
||||||
{
|
|
||||||
DEBUG_WIFI("[APConfig] wifi_softap_set_dhcps_lease_time failed!\n");
|
|
||||||
ret = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8 mode = info.gw.addr ? 1 : 0;
|
uint8 mode = info.gw.addr ? 1 : 0;
|
||||||
if(!dhcpSoftAP.set_dhcps_offer_option(OFFER_ROUTER, &mode))
|
if(!server.set_dhcps_offer_option(OFFER_ROUTER, &mode))
|
||||||
{
|
{
|
||||||
DEBUG_WIFI("[APConfig] wifi_softap_set_dhcps_offer_option failed!\n");
|
DEBUG_WIFI("[APConfig] wifi_softap_set_dhcps_offer_option failed!\n");
|
||||||
ret = false;
|
ret = false;
|
||||||
@ -389,3 +386,11 @@ String ESP8266WiFiAPClass::softAPPSK() const {
|
|||||||
|
|
||||||
return psk;
|
return psk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the static DHCP server instance attached to the softAP interface
|
||||||
|
* @return DhcpServer instance.
|
||||||
|
*/
|
||||||
|
DhcpServer& ESP8266WiFiAPClass::softAPDhcpServer() {
|
||||||
|
return getNonOSDhcpServer();
|
||||||
|
}
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include "ESP8266WiFiType.h"
|
#include "ESP8266WiFiType.h"
|
||||||
#include "ESP8266WiFiGeneric.h"
|
#include "ESP8266WiFiGeneric.h"
|
||||||
|
|
||||||
|
#include <LwipDhcpServer.h>
|
||||||
|
|
||||||
class ESP8266WiFiAPClass {
|
class ESP8266WiFiAPClass {
|
||||||
|
|
||||||
@ -48,8 +49,10 @@ class ESP8266WiFiAPClass {
|
|||||||
uint8_t* softAPmacAddress(uint8_t* mac);
|
uint8_t* softAPmacAddress(uint8_t* mac);
|
||||||
String softAPmacAddress(void);
|
String softAPmacAddress(void);
|
||||||
|
|
||||||
String softAPSSID() const;
|
String softAPSSID() const;
|
||||||
String softAPPSK() const;
|
String softAPPSK() const;
|
||||||
|
|
||||||
|
static DhcpServer& softAPDhcpServer();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
#include <lwip/napt.h>
|
#include <lwip/napt.h>
|
||||||
#include <lwip/dns.h>
|
#include <lwip/dns.h>
|
||||||
#include <PPPServer.h>
|
#include <PPPServer.h>
|
||||||
#include <dhcpserver.h>
|
|
||||||
#include <ESP8266WiFi.h>
|
#include <ESP8266WiFi.h>
|
||||||
#include <SoftwareSerial.h>
|
#include <SoftwareSerial.h>
|
||||||
|
|
||||||
|
@ -143,6 +143,7 @@ MOCK_CPP_FILES_EMU := $(MOCK_CPP_FILES_COMMON) \
|
|||||||
ArduinoMainUdp.cpp \
|
ArduinoMainUdp.cpp \
|
||||||
ArduinoMainSpiffs.cpp \
|
ArduinoMainSpiffs.cpp \
|
||||||
ArduinoMainLittlefs.cpp \
|
ArduinoMainLittlefs.cpp \
|
||||||
|
DhcpServer.cpp \
|
||||||
user_interface.cpp \
|
user_interface.cpp \
|
||||||
)
|
)
|
||||||
|
|
||||||
|
80
tests/host/common/DhcpServer.cpp
Normal file
80
tests/host/common/DhcpServer.cpp
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
#include <LwipDhcpServer.h>
|
||||||
|
#include <LwipDhcpServer-NonOS.h>
|
||||||
|
|
||||||
|
DhcpServer& getNonOSDhcpServer()
|
||||||
|
{
|
||||||
|
static DhcpServer instance(nullptr);
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DhcpServer::set_dhcps_lease(struct dhcps_lease* please)
|
||||||
|
{
|
||||||
|
(void)please;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DhcpServer::set_dhcps_lease_time(uint32 minute)
|
||||||
|
{
|
||||||
|
(void)minute;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DhcpServer::set_dhcps_offer_option(uint8 level, void* optarg)
|
||||||
|
{
|
||||||
|
(void)level;
|
||||||
|
(void)optarg;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DhcpServer::end() { }
|
||||||
|
|
||||||
|
bool DhcpServer::begin()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
DhcpServer::DhcpServer(netif*) { }
|
||||||
|
|
||||||
|
DhcpServer::~DhcpServer()
|
||||||
|
{
|
||||||
|
end();
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#include <user_interface.h>
|
||||||
|
|
||||||
|
bool wifi_softap_dhcps_start(void)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum dhcp_status wifi_softap_dhcps_status(void)
|
||||||
|
{
|
||||||
|
return DHCP_STARTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wifi_softap_dhcps_stop(void)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wifi_softap_set_dhcps_lease(struct dhcps_lease* please)
|
||||||
|
{
|
||||||
|
(void)please;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wifi_softap_set_dhcps_lease_time(uint32 minute)
|
||||||
|
{
|
||||||
|
(void)minute;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wifi_softap_set_dhcps_offer_option(uint8 level, void* optarg)
|
||||||
|
{
|
||||||
|
(void)level;
|
||||||
|
(void)optarg;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@ -41,47 +41,6 @@
|
|||||||
|
|
||||||
#include "MocklwIP.h"
|
#include "MocklwIP.h"
|
||||||
|
|
||||||
#include <LwipDhcpServer.h>
|
|
||||||
|
|
||||||
bool DhcpServer::set_dhcps_lease(struct dhcps_lease* please)
|
|
||||||
{
|
|
||||||
(void)please;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DhcpServer::set_dhcps_lease_time(uint32 minute)
|
|
||||||
{
|
|
||||||
(void)minute;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DhcpServer::set_dhcps_offer_option(uint8 level, void* optarg)
|
|
||||||
{
|
|
||||||
(void)level;
|
|
||||||
(void)optarg;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DhcpServer::end() { }
|
|
||||||
|
|
||||||
bool DhcpServer::begin(struct ip_info* info)
|
|
||||||
{
|
|
||||||
(void)info;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
DhcpServer::DhcpServer(netif* netif)
|
|
||||||
{
|
|
||||||
(void)netif;
|
|
||||||
}
|
|
||||||
|
|
||||||
DhcpServer::~DhcpServer()
|
|
||||||
{
|
|
||||||
end();
|
|
||||||
}
|
|
||||||
|
|
||||||
DhcpServer dhcpSoftAP(nullptr);
|
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#include <user_interface.h>
|
#include <user_interface.h>
|
||||||
@ -400,21 +359,6 @@ extern "C"
|
|||||||
(void)max_tpw;
|
(void)max_tpw;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wifi_softap_dhcps_start(void)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
enum dhcp_status wifi_softap_dhcps_status(void)
|
|
||||||
{
|
|
||||||
return DHCP_STARTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wifi_softap_dhcps_stop(void)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wifi_softap_get_config(struct softap_config* config)
|
bool wifi_softap_get_config(struct softap_config* config)
|
||||||
{
|
{
|
||||||
strcpy((char*)config->ssid, "apssid");
|
strcpy((char*)config->ssid, "apssid");
|
||||||
@ -450,25 +394,6 @@ extern "C"
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wifi_softap_set_dhcps_lease(struct dhcps_lease* please)
|
|
||||||
{
|
|
||||||
(void)please;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wifi_softap_set_dhcps_lease_time(uint32 minute)
|
|
||||||
{
|
|
||||||
(void)minute;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wifi_softap_set_dhcps_offer_option(uint8 level, void* optarg)
|
|
||||||
{
|
|
||||||
(void)level;
|
|
||||||
(void)optarg;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wifi_station_scan(struct scan_config* config, scan_done_cb_t cb)
|
bool wifi_station_scan(struct scan_config* config, scan_done_cb_t cb)
|
||||||
{
|
{
|
||||||
(void)config;
|
(void)config;
|
||||||
|
@ -382,17 +382,17 @@ void wifi_softap_free_station_info(void);
|
|||||||
bool wifi_softap_dhcps_start(void);
|
bool wifi_softap_dhcps_start(void);
|
||||||
bool wifi_softap_dhcps_stop(void);
|
bool wifi_softap_dhcps_stop(void);
|
||||||
|
|
||||||
#if 1 // dhcp server
|
// esp8266/Arduino notice:
|
||||||
// these functions are open-source, in dhcp server,
|
// these dhcp functions are no longer provided by the lwip lib
|
||||||
// which is now moved to lwIPDhcpServer.cpp (lwip2)
|
// only way to include them is to build our NonOS LwipDhcpServer helpers
|
||||||
// (but still there with lwip1)
|
// (ref. libraries/ESP8266WiFi/src/ESP8266WiFiAP-DhcpServer.cpp)
|
||||||
|
|
||||||
bool wifi_softap_set_dhcps_lease(struct dhcps_lease *please);
|
bool wifi_softap_set_dhcps_lease(struct dhcps_lease *please);
|
||||||
bool wifi_softap_get_dhcps_lease(struct dhcps_lease *please);
|
bool wifi_softap_get_dhcps_lease(struct dhcps_lease *please);
|
||||||
uint32 wifi_softap_get_dhcps_lease_time(void);
|
uint32 wifi_softap_get_dhcps_lease_time(void);
|
||||||
bool wifi_softap_set_dhcps_lease_time(uint32 minute);
|
bool wifi_softap_set_dhcps_lease_time(uint32 minute);
|
||||||
bool wifi_softap_reset_dhcps_lease_time(void);
|
bool wifi_softap_reset_dhcps_lease_time(void);
|
||||||
bool wifi_softap_add_dhcps_lease(uint8 *macaddr); // add static lease on the list, this will be the next available @
|
bool wifi_softap_add_dhcps_lease(uint8 *macaddr); // add static lease on the list, this will be the next available @
|
||||||
#endif // dhcp server
|
|
||||||
|
|
||||||
enum dhcp_status wifi_softap_dhcps_status(void);
|
enum dhcp_status wifi_softap_dhcps_status(void);
|
||||||
bool wifi_softap_set_dhcps_offer_option(uint8 level, void* optarg);
|
bool wifi_softap_set_dhcps_offer_option(uint8 level, void* optarg);
|
||||||
|
@ -1,130 +0,0 @@
|
|||||||
|
|
||||||
// adapted from dhcpserver.c distributed in esp8266 sdk 2.0.0
|
|
||||||
// same license may apply
|
|
||||||
|
|
||||||
#ifndef __DHCPS_H__
|
|
||||||
#define __DHCPS_H__
|
|
||||||
|
|
||||||
#include "glue.h" // for UDEBUG
|
|
||||||
|
|
||||||
#define USE_DNS
|
|
||||||
|
|
||||||
typedef struct dhcps_state{
|
|
||||||
sint16_t state;
|
|
||||||
} dhcps_state;
|
|
||||||
|
|
||||||
typedef struct dhcps_msg {
|
|
||||||
uint8_t op, htype, hlen, hops;
|
|
||||||
uint8_t xid[4];
|
|
||||||
uint16_t secs, flags;
|
|
||||||
uint8_t ciaddr[4];
|
|
||||||
uint8_t yiaddr[4];
|
|
||||||
uint8_t siaddr[4];
|
|
||||||
uint8_t giaddr[4];
|
|
||||||
uint8_t chaddr[16];
|
|
||||||
uint8_t sname[64];
|
|
||||||
uint8_t file[128];
|
|
||||||
uint8_t options[312];
|
|
||||||
}dhcps_msg;
|
|
||||||
|
|
||||||
#ifndef LWIP_OPEN_SRC
|
|
||||||
struct dhcps_lease {
|
|
||||||
bool enable;
|
|
||||||
struct ipv4_addr start_ip;
|
|
||||||
struct ipv4_addr end_ip;
|
|
||||||
};
|
|
||||||
|
|
||||||
enum dhcps_offer_option{
|
|
||||||
OFFER_START = 0x00,
|
|
||||||
OFFER_ROUTER = 0x01,
|
|
||||||
OFFER_END
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
DHCPS_TYPE_DYNAMIC,
|
|
||||||
DHCPS_TYPE_STATIC
|
|
||||||
} dhcps_type_t;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
DHCPS_STATE_ONLINE,
|
|
||||||
DHCPS_STATE_OFFLINE
|
|
||||||
} dhcps_state_t;
|
|
||||||
|
|
||||||
struct dhcps_pool{
|
|
||||||
struct ipv4_addr ip;
|
|
||||||
uint8 mac[6];
|
|
||||||
uint32 lease_timer;
|
|
||||||
dhcps_type_t type;
|
|
||||||
dhcps_state_t state;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct _list_node{
|
|
||||||
void *pnode;
|
|
||||||
struct _list_node *pnext;
|
|
||||||
}list_node;
|
|
||||||
|
|
||||||
extern uint32 dhcps_lease_time;
|
|
||||||
#define DHCPS_LEASE_TIMER dhcps_lease_time //0x05A0
|
|
||||||
#define DHCPS_MAX_LEASE 0x64
|
|
||||||
#define BOOTP_BROADCAST 0x8000
|
|
||||||
|
|
||||||
#define DHCP_REQUEST 1
|
|
||||||
#define DHCP_REPLY 2
|
|
||||||
#define DHCP_HTYPE_ETHERNET 1
|
|
||||||
#define DHCP_HLEN_ETHERNET 6
|
|
||||||
#define DHCP_MSG_LEN 236
|
|
||||||
|
|
||||||
#define DHCPS_SERVER_PORT 67
|
|
||||||
#define DHCPS_CLIENT_PORT 68
|
|
||||||
|
|
||||||
#define DHCPDISCOVER 1
|
|
||||||
#define DHCPOFFER 2
|
|
||||||
#define DHCPREQUEST 3
|
|
||||||
#define DHCPDECLINE 4
|
|
||||||
#define DHCPACK 5
|
|
||||||
#define DHCPNAK 6
|
|
||||||
#define DHCPRELEASE 7
|
|
||||||
|
|
||||||
#define DHCP_OPTION_SUBNET_MASK 1
|
|
||||||
#define DHCP_OPTION_ROUTER 3
|
|
||||||
#define DHCP_OPTION_DNS_SERVER 6
|
|
||||||
#define DHCP_OPTION_REQ_IPADDR 50
|
|
||||||
#define DHCP_OPTION_LEASE_TIME 51
|
|
||||||
#define DHCP_OPTION_MSG_TYPE 53
|
|
||||||
#define DHCP_OPTION_SERVER_ID 54
|
|
||||||
#define DHCP_OPTION_INTERFACE_MTU 26
|
|
||||||
#define DHCP_OPTION_PERFORM_ROUTER_DISCOVERY 31
|
|
||||||
#define DHCP_OPTION_BROADCAST_ADDRESS 28
|
|
||||||
#define DHCP_OPTION_REQ_LIST 55
|
|
||||||
#define DHCP_OPTION_END 255
|
|
||||||
|
|
||||||
//#define USE_CLASS_B_NET 1
|
|
||||||
#define DHCPS_DEBUG UDEBUG
|
|
||||||
#define MAX_STATION_NUM 8
|
|
||||||
|
|
||||||
#define DHCPS_STATE_OFFER 1
|
|
||||||
#define DHCPS_STATE_DECLINE 2
|
|
||||||
#define DHCPS_STATE_ACK 3
|
|
||||||
#define DHCPS_STATE_NAK 4
|
|
||||||
#define DHCPS_STATE_IDLE 5
|
|
||||||
#define DHCPS_STATE_RELEASE 6
|
|
||||||
|
|
||||||
#define dhcps_router_enabled(offer) ((offer & OFFER_ROUTER) != 0)
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void dhcps_set_dns (int num, const ipv4_addr_t* dns);
|
|
||||||
|
|
||||||
void dhcps_start(struct ip_info *info);
|
|
||||||
void dhcps_stop(void);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
x
Reference in New Issue
Block a user