Browse Source

Merge branch 'bugfix/esp_netif_hostname_v4.1' into 'release/v4.1'

esp_netif: fix get/set hostname API to reflect user settings (v4.1)

See merge request espressif/esp-idf!11360
Jiang Jiang Jian 4 years ago
parent
commit
150910ccd8

+ 4 - 0
components/esp_netif/include/esp_netif.h

@@ -262,6 +262,10 @@ esp_err_t esp_netif_set_mac(esp_netif_t *esp_netif, uint8_t mac[]);
 /**
  * @brief  Set the hostname of an interface
  *
+ * The configured hostname overrides the default configuration value CONFIG_LWIP_LOCAL_HOSTNAME.
+ * Please note that when the hostname is altered after interface started/connected the changes
+ * would only be reflected once the interface restarts/reconnects
+ *
  * @param[in]  esp_netif Handle to esp-netif instance
  * @param[in]   hostname New hostname for the interface. Maximum length 32 bytes.
  *

+ 2 - 2
components/esp_netif/lwip/esp_netif_lwip.c

@@ -1091,11 +1091,11 @@ esp_err_t esp_netif_get_hostname(esp_netif_t *esp_netif, const char **hostname)
 #if LWIP_NETIF_HOSTNAME
     struct netif *p_netif = esp_netif->lwip_netif;
 
-    if (p_netif != NULL) {
+    if (p_netif != NULL && p_netif->hostname != NULL) {
         *hostname = p_netif->hostname;
         return ESP_OK;
     } else {
-        return ESP_ERR_ESP_NETIF_INVALID_PARAMS;
+        return ESP_ERR_ESP_NETIF_IF_NOT_READY;
     }
 #else
     return ESP_ERR_ESP_NETIF_IF_NOT_READY;

+ 2 - 1
components/lwip/Kconfig

@@ -4,7 +4,8 @@ menu "LWIP"
         string "Local netif hostname"
         default 'espressif'
         help
-            The name this device will report to other devices on the network
+            The default name this device will report to other devices on the network.
+            Could be updated at runtime with esp_netif_set_hostname()
 
     config LWIP_DNS_SUPPORT_MDNS_QUERIES
         bool "Enable mDNS queries in resolving host name"

+ 5 - 2
components/lwip/port/esp32/netif/ethernetif.c

@@ -196,11 +196,14 @@ err_t ethernetif_init(struct netif *netif)
 {
     LWIP_ASSERT("netif != NULL", (netif != NULL));
     /* Have to get the esp-netif handle from netif first and then driver==ethernet handle from there */
-    esp_eth_handle_t eth_handle = esp_netif_get_io_driver(esp_netif_get_handle_from_netif_impl(netif));
+    esp_netif_t *esp_netif = esp_netif_get_handle_from_netif_impl(netif);
+    esp_eth_handle_t eth_handle = esp_netif_get_io_driver(esp_netif);
     /* Initialize interface hostname */
 #if LWIP_NETIF_HOSTNAME
 #if ESP_LWIP
-    netif->hostname = CONFIG_LWIP_LOCAL_HOSTNAME;
+    if (esp_netif_get_hostname(esp_netif, &netif->hostname) != ESP_OK) {
+        netif->hostname = CONFIG_LWIP_LOCAL_HOSTNAME;
+    }
 #else
     netif->hostname = "lwip";
 #endif

+ 3 - 1
components/lwip/port/esp32/netif/wlanif.c

@@ -225,7 +225,9 @@ wlanif_init(struct netif *netif)
   /* Initialize interface hostname */
 
 #if ESP_LWIP
-  netif->hostname = CONFIG_LWIP_LOCAL_HOSTNAME;
+  if (esp_netif_get_hostname(esp_netif_get_handle_from_netif_impl(netif), &netif->hostname) != ESP_OK) {
+    netif->hostname = CONFIG_LWIP_LOCAL_HOSTNAME;
+  }
 #else
   netif->hostname = "lwip";
 #endif