esp_netif: Add CONFIG_LWIP_DHCPS to sperate the code

This commit is contained in:
liuhan 2021-04-14 19:57:44 +08:00 committed by bot
parent cfb6857f53
commit 7d5ae1ee26
5 changed files with 57 additions and 2 deletions

View File

@ -72,6 +72,16 @@
return esp_netif_lwip_ipc_call(function, netif, (void *)(param)); \ return esp_netif_lwip_ipc_call(function, netif, (void *)(param)); \
} }
/**
* @brief If netif protocol not enabled in menuconfig, log the error and return appropriate code indicating failure
*/
#define LOG_NETIF_DISABLED_AND_DO(proto, action) \
do { \
ESP_LOGE(TAG, "%s not supported, please enable it in lwIP component configuration", proto); \
action; \
} while(0)
// //
// Internal types // Internal types
// //
@ -630,7 +640,7 @@ esp_err_t esp_netif_get_mac(esp_netif_t *esp_netif, uint8_t mac[])
return ESP_OK; return ESP_OK;
} }
#if ESP_DHCPS
static void esp_netif_dhcps_cb(u8_t client_ip[4]) static void esp_netif_dhcps_cb(u8_t client_ip[4])
{ {
ESP_LOGI(TAG, "DHCP server assigned IP to a station, IP is: %d.%d.%d.%d", ESP_LOGI(TAG, "DHCP server assigned IP to a station, IP is: %d.%d.%d.%d",
@ -644,6 +654,7 @@ static void esp_netif_dhcps_cb(u8_t client_ip[4])
ESP_LOGE(TAG, "dhcps cb: failed to post IP_EVENT_AP_STAIPASSIGNED (%x)", ret); ESP_LOGE(TAG, "dhcps cb: failed to post IP_EVENT_AP_STAIPASSIGNED (%x)", ret);
} }
} }
#endif
static esp_err_t esp_netif_config_sanity_check(const esp_netif_t * esp_netif) static esp_err_t esp_netif_config_sanity_check(const esp_netif_t * esp_netif)
{ {
@ -693,6 +704,7 @@ static esp_err_t esp_netif_start_api(esp_netif_api_msg_t *msg)
netif_set_up(p_netif); netif_set_up(p_netif);
} }
if (esp_netif->flags & ESP_NETIF_DHCP_SERVER) { if (esp_netif->flags & ESP_NETIF_DHCP_SERVER) {
#if ESP_DHCPS
if (esp_netif->dhcps_status != ESP_NETIF_DHCP_STARTED) { if (esp_netif->dhcps_status != ESP_NETIF_DHCP_STARTED) {
if (p_netif != NULL && netif_is_up(p_netif)) { if (p_netif != NULL && netif_is_up(p_netif)) {
esp_netif_ip_info_t *default_ip = esp_netif->ip_info; esp_netif_ip_info_t *default_ip = esp_netif->ip_info;
@ -715,6 +727,9 @@ static esp_err_t esp_netif_start_api(esp_netif_api_msg_t *msg)
} }
ESP_LOGD(TAG, "DHCP server already started"); ESP_LOGD(TAG, "DHCP server already started");
return ESP_ERR_ESP_NETIF_DHCP_ALREADY_STARTED; return ESP_ERR_ESP_NETIF_DHCP_ALREADY_STARTED;
#else
LOG_NETIF_DISABLED_AND_DO("DHCP Server", return ESP_ERR_NOT_SUPPORTED);
#endif
} else if (esp_netif->flags & ESP_NETIF_DHCP_CLIENT) { } else if (esp_netif->flags & ESP_NETIF_DHCP_CLIENT) {
if (esp_netif->dhcpc_status != ESP_NETIF_DHCP_STARTED) { if (esp_netif->dhcpc_status != ESP_NETIF_DHCP_STARTED) {
if (p_netif != NULL) { if (p_netif != NULL) {
@ -764,10 +779,14 @@ static esp_err_t esp_netif_stop_api(esp_netif_api_msg_t *msg)
} }
if (esp_netif->flags & ESP_NETIF_DHCP_SERVER) { if (esp_netif->flags & ESP_NETIF_DHCP_SERVER) {
#if ESP_DHCPS
dhcps_stop(lwip_netif); // TODO(IDF-1099): dhcps checks status by its self dhcps_stop(lwip_netif); // TODO(IDF-1099): dhcps checks status by its self
if (ESP_NETIF_DHCP_STOPPED != esp_netif->dhcps_status) { if (ESP_NETIF_DHCP_STOPPED != esp_netif->dhcps_status) {
esp_netif->dhcps_status = ESP_NETIF_DHCP_INIT; esp_netif->dhcps_status = ESP_NETIF_DHCP_INIT;
} }
#else
LOG_NETIF_DISABLED_AND_DO("DHCP Server", return ESP_ERR_NOT_SUPPORTED);
#endif
} else if (esp_netif->flags & ESP_NETIF_DHCP_CLIENT) { } else if (esp_netif->flags & ESP_NETIF_DHCP_CLIENT) {
dhcp_release(lwip_netif); dhcp_release(lwip_netif);
dhcp_stop(lwip_netif); dhcp_stop(lwip_netif);
@ -1052,6 +1071,7 @@ static esp_err_t esp_netif_dhcpc_start_api(esp_netif_api_msg_t *msg)
esp_err_t esp_netif_dhcpc_start(esp_netif_t *esp_netif) _RUN_IN_LWIP_TASK_IF_SUPPORTED(esp_netif_dhcpc_start_api, esp_netif, NULL) esp_err_t esp_netif_dhcpc_start(esp_netif_t *esp_netif) _RUN_IN_LWIP_TASK_IF_SUPPORTED(esp_netif_dhcpc_start_api, esp_netif, NULL)
#if ESP_DHCPS
esp_err_t esp_netif_dhcps_get_status(esp_netif_t *esp_netif, esp_netif_dhcp_status_t *status) esp_err_t esp_netif_dhcps_get_status(esp_netif_t *esp_netif, esp_netif_dhcp_status_t *status)
{ {
if (!esp_netif || (esp_netif->flags & ESP_NETIF_DHCP_CLIENT) || _IS_NETIF_ANY_POINT2POINT_TYPE(esp_netif)) { if (!esp_netif || (esp_netif->flags & ESP_NETIF_DHCP_CLIENT) || _IS_NETIF_ANY_POINT2POINT_TYPE(esp_netif)) {
@ -1061,6 +1081,7 @@ esp_err_t esp_netif_dhcps_get_status(esp_netif_t *esp_netif, esp_netif_dhcp_stat
*status = esp_netif->dhcps_status; *status = esp_netif->dhcps_status;
return ESP_OK; return ESP_OK;
} }
#endif
esp_err_t esp_netif_dhcpc_get_status(esp_netif_t *esp_netif, esp_netif_dhcp_status_t *status) esp_err_t esp_netif_dhcpc_get_status(esp_netif_t *esp_netif, esp_netif_dhcp_status_t *status)
{ {
@ -1072,6 +1093,7 @@ esp_err_t esp_netif_dhcpc_get_status(esp_netif_t *esp_netif, esp_netif_dhcp_stat
return ESP_OK; return ESP_OK;
} }
#if ESP_DHCPS
static esp_err_t esp_netif_dhcps_start_api(esp_netif_api_msg_t *msg) static esp_err_t esp_netif_dhcps_start_api(esp_netif_api_msg_t *msg)
{ {
esp_netif_t *esp_netif = msg->esp_netif; esp_netif_t *esp_netif = msg->esp_netif;
@ -1138,6 +1160,7 @@ static esp_err_t esp_netif_dhcps_stop_api(esp_netif_api_msg_t *msg)
} }
esp_err_t esp_netif_dhcps_stop(esp_netif_t *esp_netif) _RUN_IN_LWIP_TASK_IF_SUPPORTED(esp_netif_dhcps_stop_api, esp_netif, NULL) esp_err_t esp_netif_dhcps_stop(esp_netif_t *esp_netif) _RUN_IN_LWIP_TASK_IF_SUPPORTED(esp_netif_dhcps_stop_api, esp_netif, NULL)
#endif
static esp_err_t esp_netif_set_hostname_api(esp_netif_api_msg_t *msg) static esp_err_t esp_netif_set_hostname_api(esp_netif_api_msg_t *msg)
{ {
@ -1432,6 +1455,7 @@ static esp_err_t esp_netif_set_dns_info_api(esp_netif_api_msg_t *msg)
lwip_ip->type = IPADDR_TYPE_V4; lwip_ip->type = IPADDR_TYPE_V4;
#endif #endif
if (esp_netif->flags & ESP_NETIF_DHCP_SERVER) { if (esp_netif->flags & ESP_NETIF_DHCP_SERVER) {
#if ESP_DHCPS
// if DHCP server configured to set DNS in dhcps API // if DHCP server configured to set DNS in dhcps API
if (type != ESP_NETIF_DNS_MAIN) { if (type != ESP_NETIF_DNS_MAIN) {
ESP_LOGD(TAG, "set dns invalid type"); ESP_LOGD(TAG, "set dns invalid type");
@ -1439,6 +1463,9 @@ static esp_err_t esp_netif_set_dns_info_api(esp_netif_api_msg_t *msg)
} else { } else {
dhcps_dns_setserver(lwip_ip); dhcps_dns_setserver(lwip_ip);
} }
#else
LOG_NETIF_DISABLED_AND_DO("DHCP Server", return ESP_ERR_NOT_SUPPORTED);
#endif
} else { } else {
dns_setserver(type, lwip_ip); dns_setserver(type, lwip_ip);
} }
@ -1473,8 +1500,12 @@ static esp_err_t esp_netif_get_dns_info_api(esp_netif_api_msg_t *msg)
} }
if (esp_netif->flags & ESP_NETIF_DHCP_SERVER) { if (esp_netif->flags & ESP_NETIF_DHCP_SERVER) {
#if ESP_DHCPS
ip4_addr_t dns_ip = dhcps_dns_getserver(); ip4_addr_t dns_ip = dhcps_dns_getserver();
memcpy(&dns->ip.u_addr.ip4, &dns_ip, sizeof(ip4_addr_t)); memcpy(&dns->ip.u_addr.ip4, &dns_ip, sizeof(ip4_addr_t));
#else
LOG_NETIF_DISABLED_AND_DO("DHCP Server", return ESP_ERR_NOT_SUPPORTED);
#endif
} else { } else {
const ip_addr_t* dns_ip = NULL; const ip_addr_t* dns_ip = NULL;
dns_ip = dns_getserver(type); dns_ip = dns_getserver(type);
@ -1672,6 +1703,7 @@ int32_t esp_netif_get_event_id(esp_netif_t *esp_netif, esp_netif_ip_event_type_t
} }
} }
#if ESP_DHCPS
esp_err_t esp_netif_dhcps_option(esp_netif_t *esp_netif, esp_netif_dhcp_option_mode_t opt_op, esp_netif_dhcp_option_id_t opt_id, void *opt_val, esp_err_t esp_netif_dhcps_option(esp_netif_t *esp_netif, esp_netif_dhcp_option_mode_t opt_op, esp_netif_dhcp_option_id_t opt_id, void *opt_val,
uint32_t opt_len) uint32_t opt_len)
{ {
@ -1799,6 +1831,7 @@ esp_err_t esp_netif_dhcps_option(esp_netif_t *esp_netif, esp_netif_dhcp_option_m
return ESP_OK; return ESP_OK;
} }
#endif
esp_err_t esp_netif_dhcpc_option(esp_netif_t *esp_netif, esp_netif_dhcp_option_mode_t opt_op, esp_netif_dhcp_option_id_t opt_id, void *opt_val, esp_err_t esp_netif_dhcpc_option(esp_netif_t *esp_netif, esp_netif_dhcp_option_mode_t opt_op, esp_netif_dhcp_option_id_t opt_id, void *opt_val,
uint32_t opt_len) uint32_t opt_len)

View File

@ -7,7 +7,6 @@ set(include_dirs
) )
set(srcs set(srcs
"apps/dhcpserver/dhcpserver.c"
"apps/sntp/sntp.c" "apps/sntp/sntp.c"
"lwip/src/api/api_lib.c" "lwip/src/api/api_lib.c"
"lwip/src/api/api_msg.c" "lwip/src/api/api_msg.c"
@ -145,6 +144,10 @@ if(CONFIG_LWIP_ICMP)
"apps/ping/ping_sock.c") "apps/ping/ping_sock.c")
endif() endif()
if(CONFIG_LWIP_DHCPS)
list(APPEND srcs "apps/dhcpserver/dhcpserver.c")
endif()
idf_component_register(SRCS "${srcs}" idf_component_register(SRCS "${srcs}"
INCLUDE_DIRS "${include_dirs}" INCLUDE_DIRS "${include_dirs}"
LDFRAGMENTS linker.lf LDFRAGMENTS linker.lf

View File

@ -258,10 +258,18 @@ menu "LWIP"
menu "DHCP server" menu "DHCP server"
config LWIP_DHCPS
bool "DHCPS: Enable IPv4 Dynamic Host Configuration Protocol Server (DHCPS)"
default y
help
Enabling this option allows the device to run the DHCP server
(to dynamically assign IPv4 addresses to clients).
config LWIP_DHCPS_LEASE_UNIT config LWIP_DHCPS_LEASE_UNIT
int "Multiplier for lease time, in seconds" int "Multiplier for lease time, in seconds"
range 1 3600 range 1 3600
default 60 default 60
depends on LWIP_DHCPS
help help
The DHCP server is calculating lease time multiplying the sent The DHCP server is calculating lease time multiplying the sent
and received times by this number of seconds per unit. and received times by this number of seconds per unit.
@ -271,6 +279,7 @@ menu "LWIP"
int "Maximum number of stations" int "Maximum number of stations"
range 1 64 range 1 64
default 8 default 8
depends on LWIP_DHCPS
help help
The maximum number of DHCP clients that are connected to the server. The maximum number of DHCP clients that are connected to the server.
After this number is exceeded, DHCP server removes of the oldest device After this number is exceeded, DHCP server removes of the oldest device

View File

@ -47,6 +47,10 @@ ifdef CONFIG_LWIP_PPP_SUPPORT
COMPONENT_SRCDIRS += lwip/src/netif/ppp lwip/src/netif/ppp/polarssl COMPONENT_SRCDIRS += lwip/src/netif/ppp lwip/src/netif/ppp/polarssl
endif endif
ifndef CONFIG_LWIP_DHCPS
COMPONENT_OBJEXCLUDE += apps/dhcpserver/dhcpserver.o
endif
CFLAGS += -Wno-address # lots of LWIP source files evaluate macros that check address of stack variables CFLAGS += -Wno-address # lots of LWIP source files evaluate macros that check address of stack variables
lwip/src/netif/ppp/ppp.o: CFLAGS += -Wno-uninitialized lwip/src/netif/ppp/ppp.o: CFLAGS += -Wno-uninitialized

View File

@ -986,7 +986,13 @@
#define ESP_STATS_MEM CONFIG_LWIP_STATS #define ESP_STATS_MEM CONFIG_LWIP_STATS
#define ESP_STATS_DROP CONFIG_LWIP_STATS #define ESP_STATS_DROP CONFIG_LWIP_STATS
#define ESP_STATS_TCP 0 #define ESP_STATS_TCP 0
#ifdef CONFIG_LWIP_DHCPS
#define ESP_DHCPS 1
#define ESP_DHCPS_TIMER 1 #define ESP_DHCPS_TIMER 1
#else
#define ESP_DHCPS 0
#define ESP_DHCPS_TIMER 0
#endif /* CONFIG_LWIP_DHCPS */
#define ESP_LWIP_LOGI(...) ESP_LOGI("lwip", __VA_ARGS__) #define ESP_LWIP_LOGI(...) ESP_LOGI("lwip", __VA_ARGS__)
#define ESP_PING 1 #define ESP_PING 1
#define ESP_HAS_SELECT 1 #define ESP_HAS_SELECT 1