mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-01 03:34:32 +02:00
Merge branch 'bugfix/esp_netif_restart_dhcpc_v4.1' into 'release/v4.1'
esp_netif: Remove restarting DHCP client/server if it has already been started (backport v4.1) See merge request espressif/esp-idf!10000
This commit is contained in:
@@ -878,6 +878,11 @@ static esp_err_t esp_netif_dhcpc_start_api(esp_netif_api_msg_t *msg)
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
|
||||
if (esp_netif->dhcpc_status == ESP_NETIF_DHCP_STARTED) {
|
||||
ESP_LOGD(TAG, "dhcp client already started");
|
||||
return ESP_ERR_ESP_NETIF_DHCP_ALREADY_STARTED;
|
||||
}
|
||||
|
||||
struct netif *p_netif = esp_netif->lwip_netif;
|
||||
|
||||
esp_netif_reset_ip_info(esp_netif);
|
||||
@@ -947,6 +952,11 @@ static esp_err_t esp_netif_dhcps_start_api(esp_netif_api_msg_t *msg)
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
|
||||
if (esp_netif->dhcps_status == ESP_NETIF_DHCP_STARTED) {
|
||||
ESP_LOGD(TAG, "dhcp server already started");
|
||||
return ESP_ERR_ESP_NETIF_DHCP_ALREADY_STARTED;
|
||||
}
|
||||
|
||||
struct netif *p_netif = esp_netif->lwip_netif;
|
||||
if (p_netif != NULL && netif_is_up(p_netif)) {
|
||||
esp_netif_ip_info_t *default_ip = esp_netif->ip_info;
|
||||
|
@@ -82,8 +82,20 @@ TEST_CASE("esp_netif: test dhcp client state transitions for wifi station", "[es
|
||||
TEST_ASSERT_EQUAL(ESP_NETIF_DHCP_INIT, state);
|
||||
esp_netif_action_connected(sta, NULL, 0, NULL);
|
||||
TEST_ASSERT_EQUAL(ESP_OK, esp_netif_dhcpc_get_status(sta, &state));
|
||||
|
||||
TEST_ASSERT_EQUAL(ESP_NETIF_DHCP_STARTED, state);
|
||||
|
||||
// test manual DHCP state transitions using dhcpc-start/stop API
|
||||
TEST_ASSERT_EQUAL(ESP_OK, esp_netif_dhcpc_stop(sta));
|
||||
TEST_ASSERT_EQUAL(ESP_OK, esp_netif_dhcpc_get_status(sta, &state));
|
||||
TEST_ASSERT_EQUAL(ESP_NETIF_DHCP_STOPPED, state);
|
||||
TEST_ASSERT_EQUAL(ESP_OK, esp_netif_dhcpc_start(sta));
|
||||
TEST_ASSERT_EQUAL(ESP_OK, esp_netif_dhcpc_get_status(sta, &state));
|
||||
TEST_ASSERT_EQUAL(ESP_NETIF_DHCP_STARTED, state);
|
||||
TEST_ASSERT_EQUAL(ESP_ERR_ESP_NETIF_DHCP_ALREADY_STARTED, esp_netif_dhcpc_start(sta));
|
||||
TEST_ASSERT_EQUAL(ESP_OK, esp_netif_dhcpc_get_status(sta, &state));
|
||||
TEST_ASSERT_EQUAL(ESP_NETIF_DHCP_STARTED, state);
|
||||
|
||||
// stop the netif and test dhcp state update
|
||||
esp_netif_action_stop(sta, NULL, 0, NULL);
|
||||
TEST_ASSERT_EQUAL(ESP_OK, esp_netif_dhcpc_get_status(sta, &state));
|
||||
|
||||
@@ -115,6 +127,18 @@ TEST_CASE("esp_netif: test dhcp server state transitions for wifi soft AP", "[es
|
||||
TEST_ASSERT_EQUAL(ESP_OK, esp_netif_dhcps_get_status(ap, &state));
|
||||
TEST_ASSERT_EQUAL(ESP_NETIF_DHCP_STARTED, state);
|
||||
|
||||
// test manual DHCP state transitions using dhcps-start/stop API
|
||||
TEST_ASSERT_EQUAL(ESP_OK, esp_netif_dhcps_stop(ap));
|
||||
TEST_ASSERT_EQUAL(ESP_OK, esp_netif_dhcps_get_status(ap, &state));
|
||||
TEST_ASSERT_EQUAL(ESP_NETIF_DHCP_STOPPED, state);
|
||||
TEST_ASSERT_EQUAL(ESP_OK, esp_netif_dhcps_start(ap));
|
||||
TEST_ASSERT_EQUAL(ESP_OK, esp_netif_dhcps_get_status(ap, &state));
|
||||
TEST_ASSERT_EQUAL(ESP_NETIF_DHCP_STARTED, state);
|
||||
TEST_ASSERT_EQUAL(ESP_ERR_ESP_NETIF_DHCP_ALREADY_STARTED, esp_netif_dhcps_start(ap));
|
||||
TEST_ASSERT_EQUAL(ESP_OK, esp_netif_dhcps_get_status(ap, &state));
|
||||
TEST_ASSERT_EQUAL(ESP_NETIF_DHCP_STARTED, state);
|
||||
|
||||
// stop the netif and test dhcp state update
|
||||
esp_netif_action_stop(ap, NULL, 0, NULL);
|
||||
TEST_ASSERT_EQUAL(ESP_OK, esp_netif_dhcps_get_status(ap, &state));
|
||||
TEST_ASSERT_EQUAL(ESP_NETIF_DHCP_INIT, state);
|
||||
|
Reference in New Issue
Block a user