1 /*
2  * SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef _ESP_NETIF_DEFAULTS_H
8 #define _ESP_NETIF_DEFAULTS_H
9 
10 #include "esp_compiler.h"
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 //
17 // Macros to assemble master configs with partial configs from netif, stack and driver
18 //
19 
20 // If GARP enabled in menuconfig (default), make it also a default config for common netifs
21 #ifdef CONFIG_LWIP_ESP_GRATUITOUS_ARP
22 #define ESP_NETIF_DEFAULT_ARP_FLAGS (ESP_NETIF_FLAG_GARP)
23 #else
24 #define ESP_NETIF_DEFAULT_ARP_FLAGS (0)
25 #endif
26 
27 #ifdef CONFIG_LWIP_IPV4
28 #define ESP_NETIF_IPV4_ONLY_FLAGS(flags) (flags)
29 #else
30 #define ESP_NETIF_IPV4_ONLY_FLAGS(flags) (0)
31 #endif
32 
33 #ifdef CONFIG_LWIP_ESP_MLDV6_REPORT
34 #define ESP_NETIF_DEFAULT_MLDV6_REPORT_FLAGS (ESP_NETIF_FLAG_MLDV6_REPORT)
35 #else
36 #define ESP_NETIF_DEFAULT_MLDV6_REPORT_FLAGS (0)
37 #endif
38 
39 #define ESP_NETIF_INHERENT_DEFAULT_WIFI_STA() \
40     {   \
41         .flags = (esp_netif_flags_t)(ESP_NETIF_IPV4_ONLY_FLAGS(ESP_NETIF_DHCP_CLIENT) | ESP_NETIF_DEFAULT_ARP_FLAGS | ESP_NETIF_DEFAULT_MLDV6_REPORT_FLAGS | ESP_NETIF_FLAG_EVENT_IP_MODIFIED), \
42         ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(mac) \
43         ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(ip_info) \
44         .get_ip_event = IP_EVENT_STA_GOT_IP, \
45         .lost_ip_event = IP_EVENT_STA_LOST_IP, \
46         .if_key = "WIFI_STA_DEF", \
47         .if_desc = "sta", \
48         .route_prio = 100, \
49         .bridge_info = NULL \
50      }  \
51 
52 #ifdef CONFIG_ESP_WIFI_SOFTAP_SUPPORT
53 #define ESP_NETIF_INHERENT_DEFAULT_WIFI_AP() \
54     {   \
55         .flags = (esp_netif_flags_t)(ESP_NETIF_IPV4_ONLY_FLAGS(ESP_NETIF_DHCP_SERVER) | ESP_NETIF_FLAG_AUTOUP), \
56         ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(mac) \
57         .ip_info = &_g_esp_netif_soft_ap_ip, \
58         .get_ip_event = 0, \
59         .lost_ip_event = 0, \
60         .if_key = "WIFI_AP_DEF", \
61         .if_desc = "ap", \
62         .route_prio = 10, \
63         .bridge_info = NULL \
64     }
65 #endif
66 
67 #define ESP_NETIF_INHERENT_DEFAULT_WIFI_NAN() \
68     {   \
69         .flags = 0, \
70         ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(mac) \
71         ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(ip_info) \
72         .get_ip_event = 0, \
73         .lost_ip_event = 0, \
74         .if_key = "WIFI_NAN_DEF", \
75         .if_desc = "nan", \
76         .route_prio = 10 \
77     };
78 
79 #define ESP_NETIF_INHERENT_DEFAULT_ETH() \
80     {   \
81         .flags = (esp_netif_flags_t)(ESP_NETIF_IPV4_ONLY_FLAGS(ESP_NETIF_DHCP_CLIENT) | ESP_NETIF_DEFAULT_ARP_FLAGS | ESP_NETIF_FLAG_EVENT_IP_MODIFIED), \
82         ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(mac) \
83         ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(ip_info) \
84         .get_ip_event = IP_EVENT_ETH_GOT_IP, \
85         .lost_ip_event = IP_EVENT_ETH_LOST_IP, \
86         .if_key = "ETH_DEF", \
87         .if_desc = "eth", \
88         .route_prio = 50, \
89         .bridge_info = NULL \
90     }
91 
92 #ifdef CONFIG_PPP_SUPPORT
93 #define ESP_NETIF_INHERENT_DEFAULT_PPP() \
94     {   \
95         .flags = ESP_NETIF_FLAG_IS_PPP, \
96         ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(mac) \
97         ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(ip_info) \
98         .get_ip_event = IP_EVENT_PPP_GOT_IP,    \
99         .lost_ip_event = IP_EVENT_PPP_LOST_IP,  \
100         .if_key = "PPP_DEF",    \
101         .if_desc = "ppp",   \
102         .route_prio = 20,  \
103         .bridge_info = NULL \
104     }
105 #endif /* CONFIG_PPP_SUPPORT */
106 
107 
108 
109 
110 #define ESP_NETIF_INHERENT_DEFAULT_BR() \
111     {   \
112         .flags = (esp_netif_flags_t)(ESP_NETIF_DHCP_CLIENT | ESP_NETIF_DEFAULT_ARP_FLAGS | ESP_NETIF_FLAG_EVENT_IP_MODIFIED | ESP_NETIF_FLAG_IS_BRIDGE), \
113         ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(mac) \
114         ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(ip_info) \
115         .get_ip_event = IP_EVENT_ETH_GOT_IP, \
116         .lost_ip_event = IP_EVENT_ETH_LOST_IP, \
117         .if_key = "BR", \
118         .if_desc = "br", \
119         .route_prio = 70, \
120         .bridge_info = NULL \
121     }
122 
123 /**
124  * @brief  Default configuration reference of ethernet interface
125  */
126 #define ESP_NETIF_DEFAULT_ETH()                  \
127     {                                            \
128         .base = ESP_NETIF_BASE_DEFAULT_ETH,      \
129         .driver = NULL,                          \
130         .stack = ESP_NETIF_NETSTACK_DEFAULT_ETH, \
131     }
132 
133 #ifdef CONFIG_ESP_WIFI_SOFTAP_SUPPORT
134 /**
135  * @brief  Default configuration reference of WIFI AP
136  */
137 #define ESP_NETIF_DEFAULT_WIFI_AP()                  \
138     {                                                \
139         .base = ESP_NETIF_BASE_DEFAULT_WIFI_AP,      \
140         .driver = NULL,                              \
141         .stack = ESP_NETIF_NETSTACK_DEFAULT_WIFI_AP, \
142     }
143 #endif
144 
145 #ifdef CONFIG_ESP_WIFI_NAN_ENABLE
146 /**
147 * @brief  Default configuration reference of WIFI NAN
148 */
149 #define ESP_NETIF_DEFAULT_WIFI_NAN()                  \
150     {                                                 \
151         .base = ESP_NETIF_BASE_DEFAULT_WIFI_NAN,      \
152         .driver = NULL,                               \
153         .stack = ESP_NETIF_NETSTACK_DEFAULT_WIFI_NAN, \
154     }
155 #endif
156 
157 /**
158 * @brief  Default configuration reference of WIFI STA
159 */
160 #define ESP_NETIF_DEFAULT_WIFI_STA()                  \
161     {                                                 \
162         .base = ESP_NETIF_BASE_DEFAULT_WIFI_STA,      \
163         .driver = NULL,                               \
164         .stack = ESP_NETIF_NETSTACK_DEFAULT_WIFI_STA, \
165     }
166 
167 #ifdef CONFIG_PPP_SUPPORT
168 /**
169 * @brief  Default configuration reference of PPP client
170 */
171 #define ESP_NETIF_DEFAULT_PPP()                       \
172     {                                                 \
173         .base = ESP_NETIF_BASE_DEFAULT_PPP,           \
174         .driver = NULL,                               \
175         .stack = ESP_NETIF_NETSTACK_DEFAULT_PPP,      \
176     }
177 #endif /* CONFIG_PPP_SUPPORT */
178 
179 /**
180  * @brief  Default base config (esp-netif inherent) of WIFI STA
181  */
182 #define ESP_NETIF_BASE_DEFAULT_WIFI_STA        &_g_esp_netif_inherent_sta_config
183 
184 #ifdef CONFIG_ESP_WIFI_SOFTAP_SUPPORT
185 /**
186  * @brief  Default base config (esp-netif inherent) of WIFI AP
187  */
188 #define ESP_NETIF_BASE_DEFAULT_WIFI_AP         &_g_esp_netif_inherent_ap_config
189 #endif
190 
191 #ifdef CONFIG_ESP_WIFI_NAN_ENABLE
192 /**
193  * @brief  Default base config (esp-netif inherent) of WIFI NAN
194  */
195 #define ESP_NETIF_BASE_DEFAULT_WIFI_NAN        &_g_esp_netif_inherent_nan_config
196 #endif
197 
198 /**
199  * @brief  Default base config (esp-netif inherent) of ethernet interface
200  */
201 #define ESP_NETIF_BASE_DEFAULT_ETH             &_g_esp_netif_inherent_eth_config
202 
203 #ifdef CONFIG_PPP_SUPPORT
204 /**
205  * @brief  Default base config (esp-netif inherent) of ppp interface
206  */
207 #define ESP_NETIF_BASE_DEFAULT_PPP             &_g_esp_netif_inherent_ppp_config
208 #endif
209 
210 
211 #define ESP_NETIF_NETSTACK_DEFAULT_ETH          _g_esp_netif_netstack_default_eth
212 #define ESP_NETIF_NETSTACK_DEFAULT_BR           _g_esp_netif_netstack_default_br
213 #define ESP_NETIF_NETSTACK_DEFAULT_WIFI_STA     _g_esp_netif_netstack_default_wifi_sta
214 #ifdef CONFIG_ESP_WIFI_SOFTAP_SUPPORT
215 #define ESP_NETIF_NETSTACK_DEFAULT_WIFI_AP      _g_esp_netif_netstack_default_wifi_ap
216 #endif
217 #ifdef CONFIG_ESP_WIFI_NAN_ENABLE
218 #define ESP_NETIF_NETSTACK_DEFAULT_WIFI_NAN     _g_esp_netif_netstack_default_wifi_nan
219 #endif
220 #ifdef CONFIG_PPP_SUPPORT
221 #define ESP_NETIF_NETSTACK_DEFAULT_PPP          _g_esp_netif_netstack_default_ppp
222 #endif
223 
224 //
225 // Include default network stacks configs
226 //  - Network stack configurations are provided in a specific network stack
227 //      implementation that is invisible to user API
228 //  - Here referenced only as opaque pointers
229 //
230 extern const esp_netif_netstack_config_t *_g_esp_netif_netstack_default_eth;
231 extern const esp_netif_netstack_config_t *_g_esp_netif_netstack_default_br;
232 extern const esp_netif_netstack_config_t *_g_esp_netif_netstack_default_wifi_sta;
233 #ifdef CONFIG_ESP_WIFI_SOFTAP_SUPPORT
234 extern const esp_netif_netstack_config_t *_g_esp_netif_netstack_default_wifi_ap;
235 #endif
236 #ifdef CONFIG_ESP_WIFI_NAN_ENABLE
237 extern const esp_netif_netstack_config_t *_g_esp_netif_netstack_default_wifi_nan;
238 #endif
239 #ifdef CONFIG_PPP_SUPPORT
240 extern const esp_netif_netstack_config_t *_g_esp_netif_netstack_default_ppp;
241 #endif
242 //
243 // Include default common configs inherent to esp-netif
244 //  - These inherent configs are defined in esp_netif_defaults.c and describe
245 //    common behavioural patterns for common interfaces such as STA, AP, ETH, PPP
246 //
247 extern const esp_netif_inherent_config_t _g_esp_netif_inherent_sta_config;
248 #ifdef CONFIG_ESP_WIFI_SOFTAP_SUPPORT
249 extern const esp_netif_inherent_config_t _g_esp_netif_inherent_ap_config;
250 #endif
251 #ifdef CONFIG_ESP_WIFI_NAN_ENABLE
252 extern const esp_netif_inherent_config_t _g_esp_netif_inherent_nan_config;
253 #endif
254 extern const esp_netif_inherent_config_t _g_esp_netif_inherent_eth_config;
255 #ifdef CONFIG_PPP_SUPPORT
256 extern const esp_netif_inherent_config_t _g_esp_netif_inherent_ppp_config;
257 #endif
258 #ifdef CONFIG_ESP_WIFI_SOFTAP_SUPPORT
259 extern const esp_netif_ip_info_t _g_esp_netif_soft_ap_ip;
260 #endif
261 
262 #ifdef __cplusplus
263 }
264 #endif
265 
266 #endif //_ESP_NETIF_DEFAULTS_H
267