VSF Documented
esp_netif.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2026 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18/*
19 * Clean-room re-implementation of ESP-IDF public API "esp_netif.h".
20 *
21 * Authored from ESP-IDF v5.x public API only. No code copied from the
22 * ESP-IDF source tree. The VSF port is backed by component/tcpip/netdrv
23 * (vk_netdrv_t) + the lwIP raw API; all IP-layer state lives inside lwIP.
24 *
25 * Coverage: the subset the stage-3 roadmap depends on -- lifecycle,
26 * start/stop, IP info, DHCP client, DNS, hostname, MAC, driver attach.
27 * DHCP server, PPP, bridge, SLAAC helpers are not implemented yet.
28 */
29
30#ifndef __VSF_ESPIDF_ESP_NETIF_H__
31#define __VSF_ESPIDF_ESP_NETIF_H__
32
33#include "esp_err.h"
34#include "esp_event_base.h"
35#include "esp_netif_ip_addr.h"
36#include "esp_netif_types.h"
37
38#ifdef __cplusplus
39extern "C" {
40#endif
41
42/*============================ LIFECYCLE =====================================*/
43
44/* One-time process-wide init. May be called multiple times; subsequent
45 * calls are no-ops. Usually invoked internally by vsf_espidf_init(); user
46 * apps can call it explicitly for defensive reasons. */
48
49/* Deinitialize the process-wide netif layer. Typically unused on VSF. */
51
52/* Allocate a new interface described by cfg. cfg->base must be non-NULL.
53 * Returns NULL on allocation failure or exhausted instance pool. */
55
56/* Release an interface. If it is still running, it is stopped first. */
57void esp_netif_destroy(esp_netif_t *esp_netif);
58
59/*============================ DRIVER ATTACH =================================*/
60
61/* Bind a driver handle to the interface. driver_handle is cast to
62 * esp_netif_driver_base_t *; if its post_attach pointer is set, the port
63 * invokes it so the driver can call esp_netif_set_driver_config(). */
65 esp_netif_iodriver_handle driver_handle);
66
67/* Store the driver ifconfig in the esp_netif. Usually called from the
68 * driver's post_attach implementation. */
71
72/*---------- VSF extension ---------------------------------------------------*/
73
74/* Wrap a vk_netdrv_t into a driver handle compatible with the standard
75 * esp_netif_attach(). Mirrors the ESP-IDF glue pattern (compare with
76 * esp_eth_new_netif_glue()): the returned object embeds an
77 * esp_netif_driver_base_t as its first member, so it can be passed
78 * directly to esp_netif_attach(). The installed post_attach callback
79 * performs the lwIP<->netdrv bind and propagates any MAC override set on
80 * the esp_netif inherent config.
81 *
82 * Typical usage:
83 * esp_netif_t *nif = esp_netif_new(&cfg);
84 * esp_netif_attach(nif, vsf_netdrv_new_netif_glue(&my_netdrv));
85 *
86 * The glue object is heap-allocated (calloc) per ESP-IDF convention;
87 * release it with vsf_netdrv_del_netif_glue() after esp_netif_destroy().
88 * Returns NULL when netdrv is NULL or allocation fails. */
89typedef struct vk_netdrv_t vk_netdrv_t;
91
94
95/*============================ ACTIONS =======================================*/
96
97/* Canonical lifecycle actions. esp_netif_action_start() brings the lwIP
98 * netif into the stack (netif_add), applies the configured static IP when
99 * no DHCP client flag is set, and enables link_up + netif_up. The
100 * _connected variant is invoked by drivers when the L2 layer reports
101 * carrier; on VSF it is equivalent to _start. */
104 int32_t event_id, void *data);
107 int32_t event_id, void *data);
110 int32_t event_id, void *data);
113 int32_t event_id, void *data);
116 int32_t event_id, void *data);
117
118/*============================ IP CONFIGURATION ==============================*/
119
121 const esp_netif_ip_info_t *ip_info);
123 esp_netif_ip_info_t *ip_info);
124
129
134
141
142/*============================ L2 / METADATA =================================*/
143
146
147esp_err_t esp_netif_set_hostname(esp_netif_t *esp_netif, const char *hostname);
148esp_err_t esp_netif_get_hostname(esp_netif_t *esp_netif, const char **hostname);
149
150bool esp_netif_is_netif_up(esp_netif_t *esp_netif);
151const char * esp_netif_get_desc(esp_netif_t *esp_netif);
152const char * esp_netif_get_ifkey(esp_netif_t *esp_netif);
155
156/*============================ ENUMERATION ===================================*/
157
158/* Linear iteration over existing interfaces. Pass NULL to get the first
159 * one; the returned pointer stays valid until esp_netif_destroy. */
161size_t esp_netif_get_nr_of_ifs(void);
162
163/* Lookup by string key (matches esp_netif_inherent_config_t::if_key). */
165
166#ifdef __cplusplus
167}
168#endif
169
170#endif // __VSF_ESPIDF_ESP_NETIF_H__
Definition vsf_netdrv.h:99
int esp_err_t
Definition esp_err.h:41
const char * esp_event_base_t
Definition esp_event_base.h:41
esp_err_t esp_netif_set_driver_config(esp_netif_t *esp_netif, const esp_netif_driver_ifconfig_t *cfg)
Definition esp_netif_port.c:304
const char * esp_netif_get_ifkey(esp_netif_t *esp_netif)
Definition esp_netif_port.c:736
esp_err_t esp_netif_action_disconnected(esp_netif_t *esp_netif, esp_event_base_t base, int32_t event_id, void *data)
Definition esp_netif_port.c:495
const char * esp_netif_get_desc(esp_netif_t *esp_netif)
Definition esp_netif_port.c:731
esp_err_t esp_netif_action_got_ip(esp_netif_t *esp_netif, esp_event_base_t base, int32_t event_id, void *data)
Definition esp_netif_port.c:501
esp_err_t esp_netif_dhcpc_get_status(esp_netif_t *esp_netif, esp_netif_dhcp_status_t *status)
Definition esp_netif_port.c:586
vsf_netdrv_netif_glue_t * vsf_netdrv_new_netif_glue(vk_netdrv_t *netdrv)
Definition esp_netif_port.c:353
esp_err_t esp_netif_set_dns_info(esp_netif_t *esp_netif, esp_netif_dns_type_t type, esp_netif_dns_info_t *dns)
Definition esp_netif_port.c:616
bool esp_netif_is_netif_up(esp_netif_t *esp_netif)
Definition esp_netif_port.c:723
esp_netif_flags_t esp_netif_get_flags(esp_netif_t *esp_netif)
Definition esp_netif_port.c:746
esp_netif_t * esp_netif_get_handle_from_ifkey(const char *ifkey)
Definition esp_netif_port.c:768
esp_err_t esp_netif_deinit(void)
Definition esp_netif_port.c:248
esp_err_t esp_netif_get_hostname(esp_netif_t *esp_netif, const char **hostname)
Definition esp_netif_port.c:709
esp_err_t esp_netif_get_mac(esp_netif_t *esp_netif, uint8_t mac[6])
Definition esp_netif_port.c:676
esp_err_t esp_netif_attach(esp_netif_t *esp_netif, esp_netif_iodriver_handle driver_handle)
Definition esp_netif_port.c:290
int esp_netif_get_route_prio(esp_netif_t *esp_netif)
Definition esp_netif_port.c:741
esp_err_t esp_netif_set_hostname(esp_netif_t *esp_netif, const char *hostname)
Definition esp_netif_port.c:689
esp_err_t esp_netif_set_ip_info(esp_netif_t *esp_netif, const esp_netif_ip_info_t *ip_info)
Definition esp_netif_port.c:510
esp_err_t esp_netif_action_start(esp_netif_t *esp_netif, esp_event_base_t base, int32_t event_id, void *data)
Definition esp_netif_port.c:375
esp_err_t esp_netif_dhcpc_start(esp_netif_t *esp_netif)
Definition esp_netif_port.c:540
esp_err_t esp_netif_dhcps_stop(esp_netif_t *esp_netif)
Definition esp_netif_port.c:601
esp_err_t esp_netif_dhcps_get_status(esp_netif_t *esp_netif, esp_netif_dhcp_status_t *status)
Definition esp_netif_port.c:606
esp_err_t esp_netif_action_connected(esp_netif_t *esp_netif, esp_event_base_t base, int32_t event_id, void *data)
Definition esp_netif_port.c:489
void vsf_netdrv_del_netif_glue(vsf_netdrv_netif_glue_t *glue)
Definition esp_netif_port.c:368
esp_netif_t * esp_netif_new(const esp_netif_config_t *cfg)
Definition esp_netif_port.c:259
esp_err_t esp_netif_set_mac(esp_netif_t *esp_netif, uint8_t mac[6])
Definition esp_netif_port.c:659
void esp_netif_destroy(esp_netif_t *esp_netif)
Definition esp_netif_port.c:277
esp_err_t esp_netif_get_dns_info(esp_netif_t *esp_netif, esp_netif_dns_type_t type, esp_netif_dns_info_t *dns)
Definition esp_netif_port.c:636
esp_err_t esp_netif_action_stop(esp_netif_t *esp_netif, esp_event_base_t base, int32_t event_id, void *data)
Definition esp_netif_port.c:455
size_t esp_netif_get_nr_of_ifs(void)
Definition esp_netif_port.c:758
esp_err_t esp_netif_get_ip_info(esp_netif_t *esp_netif, esp_netif_ip_info_t *ip_info)
Definition esp_netif_port.c:531
esp_err_t esp_netif_init(void)
Definition esp_netif_port.c:238
esp_netif_t * esp_netif_next(esp_netif_t *esp_netif)
Definition esp_netif_port.c:753
esp_err_t esp_netif_dhcpc_stop(esp_netif_t *esp_netif)
Definition esp_netif_port.c:566
esp_err_t esp_netif_dhcps_start(esp_netif_t *esp_netif)
Definition esp_netif_port.c:596
esp_netif_flags_t
Definition esp_netif_types.h:85
esp_netif_dns_type_t
Definition esp_netif_types.h:69
esp_netif_dhcp_status_t
Definition esp_netif_types.h:77
void * esp_netif_iodriver_handle
Definition esp_netif_types.h:49
struct ieee80211_ext_chansw_ie data
Definition ieee80211.h:80
int int32_t
Definition stdint.h:8
unsigned char uint8_t
Definition stdint.h:5
Definition esp_netif_types.h:129
Definition esp_netif_types.h:64
Definition esp_netif_types.h:112
Definition esp_netif_types.h:52
Definition esp_netif_port.c:77
Definition esp_netif_port.c:316
vk_netdrv_t * netdrv
Definition esp_netif_port.c:320
esp_netif_driver_base_t base
Definition esp_netif_port.c:319
vk_av_control_type_t type
Definition vsf_audio.h:170
uint8_t status
Definition vsf_tgui.h:144
Generated from commit: vsfteam/vsf@c3767bf