From 34d7aeaaed4297a214b0ccd7a100930d7d627275 Mon Sep 17 00:00:00 2001 From: yuanjm Date: Wed, 26 Aug 2020 16:19:05 +0800 Subject: [PATCH] feat(dhcp): Add dhcp timeout --- components/tcpip_adapter/tcpip_adapter_lwip.c | 56 ++++++++++++++++++- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/components/tcpip_adapter/tcpip_adapter_lwip.c b/components/tcpip_adapter/tcpip_adapter_lwip.c index 6722afd1..ec8de2c3 100644 --- a/components/tcpip_adapter/tcpip_adapter_lwip.c +++ b/components/tcpip_adapter/tcpip_adapter_lwip.c @@ -397,6 +397,20 @@ esp_err_t tcpip_adapter_start(tcpip_adapter_if_t tcpip_if, uint8_t *mac, tcpip_a dhcps_status = TCPIP_ADAPTER_DHCP_STARTED; } + } else if (tcpip_if == TCPIP_ADAPTER_IF_STA) { + if (dhcpc_status[TCPIP_ADAPTER_IF_STA] != TCPIP_ADAPTER_DHCP_STARTED) { + if (esp_netif[tcpip_if] != NULL) { + struct dhcp *dhcp_data = NULL; + dhcp_data = netif_dhcp_data(esp_netif[tcpip_if]); + if (dhcp_data == NULL) { + dhcp_data = (struct dhcp *)malloc(sizeof(struct dhcp)); + if (dhcp_data == NULL) { + return ESP_ERR_NO_MEM; + } + dhcp_set_struct(esp_netif[tcpip_if], dhcp_data); + } + } + } } tcpip_adapter_update_default_netif(); @@ -956,8 +970,46 @@ esp_err_t tcpip_adapter_dhcps_stop(tcpip_adapter_if_t tcpip_if) esp_err_t tcpip_adapter_dhcpc_option(tcpip_adapter_option_mode_t opt_op, tcpip_adapter_option_id_t opt_id, void *opt_val, uint32_t opt_len) { - // TODO: when dhcp request timeout,change the retry count - return ESP_ERR_NOT_SUPPORTED; + struct netif *p_netif = esp_netif[TCPIP_ADAPTER_IF_STA]; + if (p_netif == NULL) { + return ESP_ERR_TCPIP_ADAPTER_IF_NOT_READY; + } + struct dhcp *dhcp = netif_dhcp_data(p_netif); + if (dhcp == NULL || opt_val == NULL) { + return ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS; + } + if (opt_op == TCPIP_ADAPTER_OP_GET) { + if (dhcpc_status[TCPIP_ADAPTER_IF_STA] == TCPIP_ADAPTER_DHCP_STOPPED) { + return ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STOPPED; + } + switch (opt_id) { + case TCPIP_ADAPTER_IP_REQUEST_RETRY_TIME: + if (opt_len == sizeof(dhcp->tries)) { + *(uint8_t *)opt_val = dhcp->tries; + } + break; + default: + return ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS; + break; + } + } else if (opt_op == TCPIP_ADAPTER_OP_SET) { + if (dhcpc_status[TCPIP_ADAPTER_IF_STA] == TCPIP_ADAPTER_DHCP_STARTED) { + return ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STARTED; + } + switch (opt_id) { + case TCPIP_ADAPTER_IP_REQUEST_RETRY_TIME: + if (opt_len == sizeof(dhcp->tries)) { + dhcp->tries = *(uint8_t *)opt_val; + } + break; + default: + return ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS; + break; + } + } else { + return ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS; + } + return ESP_OK; } static void tcpip_adapter_dhcpc_cb(struct netif *netif)