/* * SPDX-FileCopyrightText: 2018-2022 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ #include "nvs.h" #include "lwip/dhcp.h" #include "lwip/netif.h" #include "netif/dhcp_state.h" #define DHCP_NAMESPACE "dhcp_state" #define IF_KEY_SIZE 3 /* * As a NVS key, use string representation of the interface index number */ static inline char *gen_if_key(struct netif *netif, char *name) { lwip_itoa(name, IF_KEY_SIZE, netif->num); return name; } bool dhcp_ip_addr_restore(struct netif *netif) { nvs_handle_t nvs; char if_key[IF_KEY_SIZE]; bool err = false; if (netif == NULL) { return false; } struct dhcp *dhcp = netif_dhcp_data(netif); uint32_t *ip_addr = &dhcp->offered_ip_addr.addr; if (nvs_open(DHCP_NAMESPACE, NVS_READONLY, &nvs) == ESP_OK) { if (nvs_get_u32(nvs, gen_if_key(netif, if_key), ip_addr) == ESP_OK) { err = true; } nvs_close(nvs); } return err; } void dhcp_ip_addr_store(struct netif *netif) { nvs_handle_t nvs; char if_key[IF_KEY_SIZE]; if (netif == NULL) { return; } struct dhcp *dhcp = netif_dhcp_data(netif); uint32_t ip_addr = dhcp->offered_ip_addr.addr; if (nvs_open(DHCP_NAMESPACE, NVS_READWRITE, &nvs) == ESP_OK) { nvs_set_u32(nvs, gen_if_key(netif, if_key), ip_addr); nvs_commit(nvs); nvs_close(nvs); } } void dhcp_ip_addr_erase(struct netif *netif) { nvs_handle_t nvs; char if_key[IF_KEY_SIZE]; if (netif == NULL) { return; } if (nvs_open(DHCP_NAMESPACE, NVS_READWRITE, &nvs) == ESP_OK) { nvs_erase_key(nvs, gen_if_key(netif, if_key)); nvs_commit(nvs); nvs_close(nvs); } }