mirror of
				https://github.com/espressif/esp-protocols.git
				synced 2025-11-04 00:21:37 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
 | 
						|
 *
 | 
						|
 * SPDX-License-Identifier: Apache-2.0
 | 
						|
 */
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include <unistd.h>
 | 
						|
#include "sdkconfig.h"
 | 
						|
 | 
						|
#ifdef CONFIG_IDF_TARGET_LINUX
 | 
						|
// namespace with esp_ on linux to avoid conflict of symbols
 | 
						|
#define gethostname esp_gethostname
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Retrieves the hostname of the device.
 | 
						|
 *
 | 
						|
 * This function provides the hostname associated with the network interface.
 | 
						|
 * Unlike the standard behavior where the hostname represents a system-wide name,
 | 
						|
 * this implementation returns lwip netif hostname (used as a hostname in DHCP packets)
 | 
						|
 *
 | 
						|
 * @param[out] name A pointer to a buffer where the hostname will be stored.
 | 
						|
 *                  The buffer must be allocated by the caller.
 | 
						|
 * @param[in] len   The size of the buffer pointed to by @p name. The hostname,
 | 
						|
 *                  including the null-terminator, must fit within this size.
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *   - 0 on success
 | 
						|
 *   - -1 on error, with `errno` set to indicate the error:
 | 
						|
 *     - `EINVAL`: Invalid argument, name is NULL, or hostname is too long
 | 
						|
 *
 | 
						|
 * @note This implementation retrieves the hostname associated with the network
 | 
						|
 * interface using the `esp_netif_get_hostname()` function, which in turn
 | 
						|
 * returns lwip netif hostname used in DHCP packets if LWIP_NETIF_HOSTNAME=1 (hardcoded)
 | 
						|
 * in ESP-IDF lwip port.
 | 
						|
 * As there could be multiple network interfaces in the system, the logic tries
 | 
						|
 * to find the default (active) netif first, then it looks for any (inactive) netif
 | 
						|
 * with highest route priority. If none of the above found or esp_netif_get_hostname() fails
 | 
						|
 * for the selected interface, this API returns the default value of `CONFIG_LWIP_LOCAL_HOSTNAME`,
 | 
						|
 * the local hostname from lwip component configuration menu.
 | 
						|
 */
 | 
						|
int gethostname(char *name, size_t len);
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 |