tcpip_adapter: fix dhcp client work flow
This commit is contained in:
parent
80d60270bb
commit
c97aa4a709
1 changed files with 23 additions and 10 deletions
|
@ -105,8 +105,15 @@ esp_err_t tcpip_adapter_stop(tcpip_adapter_if_t tcpip_if)
|
||||||
dhcps_stop(esp_netif[tcpip_if]); // TODO: dhcps checks status by its self
|
dhcps_stop(esp_netif[tcpip_if]); // TODO: dhcps checks status by its self
|
||||||
dhcps_status = TCPIP_ADAPTER_DHCP_INIT;
|
dhcps_status = TCPIP_ADAPTER_DHCP_INIT;
|
||||||
} else if (tcpip_if == TCPIP_ADAPTER_IF_STA) {
|
} else if (tcpip_if == TCPIP_ADAPTER_IF_STA) {
|
||||||
|
dhcp_release(esp_netif[tcpip_if]);
|
||||||
dhcp_stop(esp_netif[tcpip_if]);
|
dhcp_stop(esp_netif[tcpip_if]);
|
||||||
|
dhcp_cleanup(esp_netif[tcpip_if]);
|
||||||
|
|
||||||
dhcpc_status = TCPIP_ADAPTER_DHCP_INIT;
|
dhcpc_status = TCPIP_ADAPTER_DHCP_INIT;
|
||||||
|
|
||||||
|
ip4_addr_set_zero(&esp_ip[tcpip_if].ip);
|
||||||
|
ip4_addr_set_zero(&esp_ip[tcpip_if].gw);
|
||||||
|
ip4_addr_set_zero(&esp_ip[tcpip_if].netmask);
|
||||||
}
|
}
|
||||||
|
|
||||||
netif_remove(esp_netif[tcpip_if]);
|
netif_remove(esp_netif[tcpip_if]);
|
||||||
|
@ -144,20 +151,16 @@ esp_err_t tcpip_adapter_down(tcpip_adapter_if_t tcpip_if)
|
||||||
return ESP_ERR_TCPIP_ADAPTER_IF_NOT_READY;
|
return ESP_ERR_TCPIP_ADAPTER_IF_NOT_READY;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (esp_netif[tcpip_if]->dhcp != NULL) {
|
if (dhcpc_status == TCPIP_ADAPTER_DHCP_STARTED) {
|
||||||
dhcp_release(esp_netif[tcpip_if]);
|
|
||||||
dhcp_stop(esp_netif[tcpip_if]);
|
dhcp_stop(esp_netif[tcpip_if]);
|
||||||
dhcp_cleanup(esp_netif[tcpip_if]);
|
|
||||||
|
|
||||||
if (dhcpc_status != TCPIP_ADAPTER_DHCP_STOPPED) {
|
dhcpc_status = TCPIP_ADAPTER_DHCP_INIT;
|
||||||
dhcpc_status = TCPIP_ADAPTER_DHCP_INIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
ip4_addr_set_zero(&esp_ip[tcpip_if].ip);
|
ip4_addr_set_zero(&esp_ip[tcpip_if].ip);
|
||||||
ip4_addr_set_zero(&esp_ip[tcpip_if].gw);
|
ip4_addr_set_zero(&esp_ip[tcpip_if].gw);
|
||||||
ip4_addr_set_zero(&esp_ip[tcpip_if].netmask);
|
ip4_addr_set_zero(&esp_ip[tcpip_if].netmask);
|
||||||
}
|
}
|
||||||
|
|
||||||
netif_set_down(esp_netif[tcpip_if]);
|
netif_set_down(esp_netif[tcpip_if]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,7 +197,8 @@ esp_err_t tcpip_adapter_set_ip_info(tcpip_adapter_if_t tcpip_if, tcpip_adapter_i
|
||||||
struct netif *p_netif;
|
struct netif *p_netif;
|
||||||
tcpip_adapter_dhcp_status_t status;
|
tcpip_adapter_dhcp_status_t status;
|
||||||
|
|
||||||
if (tcpip_if >= TCPIP_ADAPTER_IF_MAX || ip_info == NULL) {
|
if (tcpip_if >= TCPIP_ADAPTER_IF_MAX || ip_info == NULL ||
|
||||||
|
ip4_addr_isany_val(ip_info->ip) || ip4_addr_isany_val(ip_info->netmask) || ip4_addr_isany_val(ip_info->gw)) {
|
||||||
return ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS;
|
return ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -430,8 +434,6 @@ esp_err_t tcpip_adapter_dhcpc_option(tcpip_adapter_option_mode_t opt_op, tcpip_a
|
||||||
static void tcpip_adapter_dhcpc_cb(void)
|
static void tcpip_adapter_dhcpc_cb(void)
|
||||||
{
|
{
|
||||||
struct netif *netif = esp_netif[TCPIP_ADAPTER_IF_STA];
|
struct netif *netif = esp_netif[TCPIP_ADAPTER_IF_STA];
|
||||||
tcpip_adapter_ip_info_t *ip_info = &esp_ip[TCPIP_ADAPTER_IF_STA];
|
|
||||||
system_event_t evt;
|
|
||||||
|
|
||||||
if (!netif) {
|
if (!netif) {
|
||||||
TCPIP_ADAPTER_DEBUG("null netif=%p\n", netif);
|
TCPIP_ADAPTER_DEBUG("null netif=%p\n", netif);
|
||||||
|
@ -439,10 +441,13 @@ static void tcpip_adapter_dhcpc_cb(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !ip4_addr_cmp(ip_2_ip4(&netif->ip_addr), IP4_ADDR_ANY) ) {
|
if ( !ip4_addr_cmp(ip_2_ip4(&netif->ip_addr), IP4_ADDR_ANY) ) {
|
||||||
|
tcpip_adapter_ip_info_t *ip_info = &esp_ip[TCPIP_ADAPTER_IF_STA];
|
||||||
|
|
||||||
//check whether IP is changed
|
//check whether IP is changed
|
||||||
if ( !ip4_addr_cmp(ip_2_ip4(&netif->ip_addr), &ip_info->ip) ||
|
if ( !ip4_addr_cmp(ip_2_ip4(&netif->ip_addr), &ip_info->ip) ||
|
||||||
!ip4_addr_cmp(ip_2_ip4(&netif->netmask), &ip_info->netmask) ||
|
!ip4_addr_cmp(ip_2_ip4(&netif->netmask), &ip_info->netmask) ||
|
||||||
!ip4_addr_cmp(ip_2_ip4(&netif->gw), &ip_info->gw) ) {
|
!ip4_addr_cmp(ip_2_ip4(&netif->gw), &ip_info->gw) ) {
|
||||||
|
system_event_t evt;
|
||||||
|
|
||||||
ip4_addr_set(&ip_info->ip, ip_2_ip4(&netif->ip_addr));
|
ip4_addr_set(&ip_info->ip, ip_2_ip4(&netif->ip_addr));
|
||||||
ip4_addr_set(&ip_info->netmask, ip_2_ip4(&netif->netmask));
|
ip4_addr_set(&ip_info->netmask, ip_2_ip4(&netif->netmask));
|
||||||
|
@ -479,6 +484,10 @@ esp_err_t tcpip_adapter_dhcpc_start(tcpip_adapter_if_t tcpip_if)
|
||||||
if (dhcpc_status != TCPIP_ADAPTER_DHCP_STARTED) {
|
if (dhcpc_status != TCPIP_ADAPTER_DHCP_STARTED) {
|
||||||
struct netif *p_netif = esp_netif[tcpip_if];
|
struct netif *p_netif = esp_netif[tcpip_if];
|
||||||
|
|
||||||
|
ip4_addr_set_zero(&esp_ip[tcpip_if].ip);
|
||||||
|
ip4_addr_set_zero(&esp_ip[tcpip_if].gw);
|
||||||
|
ip4_addr_set_zero(&esp_ip[tcpip_if].netmask);
|
||||||
|
|
||||||
if (p_netif != NULL) {
|
if (p_netif != NULL) {
|
||||||
if (netif_is_up(p_netif)) {
|
if (netif_is_up(p_netif)) {
|
||||||
TCPIP_ADAPTER_DEBUG("dhcp client init ip/mask/gw to all-0\n");
|
TCPIP_ADAPTER_DEBUG("dhcp client init ip/mask/gw to all-0\n");
|
||||||
|
@ -525,6 +534,10 @@ esp_err_t tcpip_adapter_dhcpc_stop(tcpip_adapter_if_t tcpip_if)
|
||||||
|
|
||||||
if (p_netif != NULL) {
|
if (p_netif != NULL) {
|
||||||
dhcp_stop(p_netif);
|
dhcp_stop(p_netif);
|
||||||
|
|
||||||
|
ip4_addr_set_zero(&esp_ip[tcpip_if].ip);
|
||||||
|
ip4_addr_set_zero(&esp_ip[tcpip_if].gw);
|
||||||
|
ip4_addr_set_zero(&esp_ip[tcpip_if].netmask);
|
||||||
} else {
|
} else {
|
||||||
TCPIP_ADAPTER_DEBUG("dhcp client if not ready\n");
|
TCPIP_ADAPTER_DEBUG("dhcp client if not ready\n");
|
||||||
return ESP_ERR_TCPIP_ADAPTER_IF_NOT_READY;
|
return ESP_ERR_TCPIP_ADAPTER_IF_NOT_READY;
|
||||||
|
|
Loading…
Reference in a new issue