xref: /nrf52832-nimble/rt-thread/components/net/lwip-2.1.0/src/include/lwip/opt.h (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero /**
2*10465441SEvalZero  * @file
3*10465441SEvalZero  *
4*10465441SEvalZero  * lwIP Options Configuration
5*10465441SEvalZero  */
6*10465441SEvalZero 
7*10465441SEvalZero /*
8*10465441SEvalZero  * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
9*10465441SEvalZero  * All rights reserved.
10*10465441SEvalZero  *
11*10465441SEvalZero  * Redistribution and use in source and binary forms, with or without modification,
12*10465441SEvalZero  * are permitted provided that the following conditions are met:
13*10465441SEvalZero  *
14*10465441SEvalZero  * 1. Redistributions of source code must retain the above copyright notice,
15*10465441SEvalZero  *    this list of conditions and the following disclaimer.
16*10465441SEvalZero  * 2. Redistributions in binary form must reproduce the above copyright notice,
17*10465441SEvalZero  *    this list of conditions and the following disclaimer in the documentation
18*10465441SEvalZero  *    and/or other materials provided with the distribution.
19*10465441SEvalZero  * 3. The name of the author may not be used to endorse or promote products
20*10465441SEvalZero  *    derived from this software without specific prior written permission.
21*10465441SEvalZero  *
22*10465441SEvalZero  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
23*10465441SEvalZero  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
24*10465441SEvalZero  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
25*10465441SEvalZero  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26*10465441SEvalZero  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
27*10465441SEvalZero  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28*10465441SEvalZero  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29*10465441SEvalZero  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
30*10465441SEvalZero  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
31*10465441SEvalZero  * OF SUCH DAMAGE.
32*10465441SEvalZero  *
33*10465441SEvalZero  * This file is part of the lwIP TCP/IP stack.
34*10465441SEvalZero  *
35*10465441SEvalZero  * Author: Adam Dunkels <[email protected]>
36*10465441SEvalZero  *
37*10465441SEvalZero  */
38*10465441SEvalZero 
39*10465441SEvalZero /*
40*10465441SEvalZero  * NOTE: || defined __DOXYGEN__ is a workaround for doxygen bug -
41*10465441SEvalZero  * without this, doxygen does not see the actual #define
42*10465441SEvalZero  */
43*10465441SEvalZero 
44*10465441SEvalZero #if !defined LWIP_HDR_OPT_H
45*10465441SEvalZero #define LWIP_HDR_OPT_H
46*10465441SEvalZero 
47*10465441SEvalZero /*
48*10465441SEvalZero  * Include user defined options first. Anything not defined in these files
49*10465441SEvalZero  * will be set to standard values. Override anything you don't like!
50*10465441SEvalZero  */
51*10465441SEvalZero #include "lwipopts.h"
52*10465441SEvalZero #include "lwip/debug.h"
53*10465441SEvalZero 
54*10465441SEvalZero /**
55*10465441SEvalZero  * @defgroup lwip_opts Options (lwipopts.h)
56*10465441SEvalZero  * @ingroup lwip
57*10465441SEvalZero  *
58*10465441SEvalZero  * @defgroup lwip_opts_debug Debugging
59*10465441SEvalZero  * @ingroup lwip_opts
60*10465441SEvalZero  *
61*10465441SEvalZero  * @defgroup lwip_opts_infrastructure Infrastructure
62*10465441SEvalZero  * @ingroup lwip_opts
63*10465441SEvalZero  *
64*10465441SEvalZero  * @defgroup lwip_opts_callback Callback-style APIs
65*10465441SEvalZero  * @ingroup lwip_opts
66*10465441SEvalZero  *
67*10465441SEvalZero  * @defgroup lwip_opts_threadsafe_apis Thread-safe APIs
68*10465441SEvalZero  * @ingroup lwip_opts
69*10465441SEvalZero  */
70*10465441SEvalZero 
71*10465441SEvalZero  /*
72*10465441SEvalZero    ------------------------------------
73*10465441SEvalZero    -------------- NO SYS --------------
74*10465441SEvalZero    ------------------------------------
75*10465441SEvalZero */
76*10465441SEvalZero /**
77*10465441SEvalZero  * @defgroup lwip_opts_nosys NO_SYS
78*10465441SEvalZero  * @ingroup lwip_opts_infrastructure
79*10465441SEvalZero  * @{
80*10465441SEvalZero  */
81*10465441SEvalZero /**
82*10465441SEvalZero  * NO_SYS==1: Use lwIP without OS-awareness (no thread, semaphores, mutexes or
83*10465441SEvalZero  * mboxes). This means threaded APIs cannot be used (socket, netconn,
84*10465441SEvalZero  * i.e. everything in the 'api' folder), only the callback-style raw API is
85*10465441SEvalZero  * available (and you have to watch out for yourself that you don't access
86*10465441SEvalZero  * lwIP functions/structures from more than one context at a time!)
87*10465441SEvalZero  */
88*10465441SEvalZero #if !defined NO_SYS || defined __DOXYGEN__
89*10465441SEvalZero #define NO_SYS                          0
90*10465441SEvalZero #endif
91*10465441SEvalZero /**
92*10465441SEvalZero  * @}
93*10465441SEvalZero  */
94*10465441SEvalZero 
95*10465441SEvalZero /**
96*10465441SEvalZero  * @defgroup lwip_opts_timers Timers
97*10465441SEvalZero  * @ingroup lwip_opts_infrastructure
98*10465441SEvalZero  * @{
99*10465441SEvalZero  */
100*10465441SEvalZero /**
101*10465441SEvalZero  * LWIP_TIMERS==0: Drop support for sys_timeout and lwip-internal cyclic timers.
102*10465441SEvalZero  * (the array of lwip-internal cyclic timers is still provided)
103*10465441SEvalZero  * (check NO_SYS_NO_TIMERS for compatibility to old versions)
104*10465441SEvalZero  */
105*10465441SEvalZero #if !defined LWIP_TIMERS || defined __DOXYGEN__
106*10465441SEvalZero #ifdef NO_SYS_NO_TIMERS
107*10465441SEvalZero #define LWIP_TIMERS                     (!NO_SYS || (NO_SYS && !NO_SYS_NO_TIMERS))
108*10465441SEvalZero #else
109*10465441SEvalZero #define LWIP_TIMERS                     1
110*10465441SEvalZero #endif
111*10465441SEvalZero #endif
112*10465441SEvalZero 
113*10465441SEvalZero /**
114*10465441SEvalZero  * LWIP_TIMERS_CUSTOM==1: Provide your own timer implementation.
115*10465441SEvalZero  * Function prototypes in timeouts.h and the array of lwip-internal cyclic timers
116*10465441SEvalZero  * are still included, but the implementation is not. The following functions
117*10465441SEvalZero  * will be required: sys_timeouts_init(), sys_timeout(), sys_untimeout(),
118*10465441SEvalZero  *                   sys_timeouts_mbox_fetch()
119*10465441SEvalZero  */
120*10465441SEvalZero #if !defined LWIP_TIMERS_CUSTOM || defined __DOXYGEN__
121*10465441SEvalZero #define LWIP_TIMERS_CUSTOM              0
122*10465441SEvalZero #endif
123*10465441SEvalZero /**
124*10465441SEvalZero  * @}
125*10465441SEvalZero  */
126*10465441SEvalZero 
127*10465441SEvalZero /**
128*10465441SEvalZero  * @defgroup lwip_opts_memcpy memcpy
129*10465441SEvalZero  * @ingroup lwip_opts_infrastructure
130*10465441SEvalZero  * @{
131*10465441SEvalZero  */
132*10465441SEvalZero /**
133*10465441SEvalZero  * MEMCPY: override this if you have a faster implementation at hand than the
134*10465441SEvalZero  * one included in your C library
135*10465441SEvalZero  */
136*10465441SEvalZero #if !defined MEMCPY || defined __DOXYGEN__
137*10465441SEvalZero #define MEMCPY(dst,src,len)             memcpy(dst,src,len)
138*10465441SEvalZero #endif
139*10465441SEvalZero 
140*10465441SEvalZero /**
141*10465441SEvalZero  * SMEMCPY: override this with care! Some compilers (e.g. gcc) can inline a
142*10465441SEvalZero  * call to memcpy() if the length is known at compile time and is small.
143*10465441SEvalZero  */
144*10465441SEvalZero #if !defined SMEMCPY || defined __DOXYGEN__
145*10465441SEvalZero #define SMEMCPY(dst,src,len)            memcpy(dst,src,len)
146*10465441SEvalZero #endif
147*10465441SEvalZero 
148*10465441SEvalZero /**
149*10465441SEvalZero  * MEMMOVE: override this if you have a faster implementation at hand than the
150*10465441SEvalZero  * one included in your C library.  lwIP currently uses MEMMOVE only when IPv6
151*10465441SEvalZero  * fragmentation support is enabled.
152*10465441SEvalZero  */
153*10465441SEvalZero #if !defined MEMMOVE || defined __DOXYGEN__
154*10465441SEvalZero #define MEMMOVE(dst,src,len)            memmove(dst,src,len)
155*10465441SEvalZero #endif
156*10465441SEvalZero /**
157*10465441SEvalZero  * @}
158*10465441SEvalZero  */
159*10465441SEvalZero 
160*10465441SEvalZero /*
161*10465441SEvalZero    ------------------------------------
162*10465441SEvalZero    ----------- Core locking -----------
163*10465441SEvalZero    ------------------------------------
164*10465441SEvalZero */
165*10465441SEvalZero /**
166*10465441SEvalZero  * @defgroup lwip_opts_lock Core locking and MPU
167*10465441SEvalZero  * @ingroup lwip_opts_infrastructure
168*10465441SEvalZero  * @{
169*10465441SEvalZero  */
170*10465441SEvalZero /**
171*10465441SEvalZero  * LWIP_MPU_COMPATIBLE: enables special memory management mechanism
172*10465441SEvalZero  * which makes lwip able to work on MPU (Memory Protection Unit) system
173*10465441SEvalZero  * by not passing stack-pointers to other threads
174*10465441SEvalZero  * (this decreases performance as memory is allocated from pools instead
175*10465441SEvalZero  * of keeping it on the stack)
176*10465441SEvalZero  */
177*10465441SEvalZero #if !defined LWIP_MPU_COMPATIBLE || defined __DOXYGEN__
178*10465441SEvalZero #define LWIP_MPU_COMPATIBLE             0
179*10465441SEvalZero #endif
180*10465441SEvalZero 
181*10465441SEvalZero /**
182*10465441SEvalZero  * LWIP_TCPIP_CORE_LOCKING
183*10465441SEvalZero  * Creates a global mutex that is held during TCPIP thread operations.
184*10465441SEvalZero  * Can be locked by client code to perform lwIP operations without changing
185*10465441SEvalZero  * into TCPIP thread using callbacks. See LOCK_TCPIP_CORE() and
186*10465441SEvalZero  * UNLOCK_TCPIP_CORE().
187*10465441SEvalZero  * Your system should provide mutexes supporting priority inversion to use this.
188*10465441SEvalZero  */
189*10465441SEvalZero #if !defined LWIP_TCPIP_CORE_LOCKING || defined __DOXYGEN__
190*10465441SEvalZero #define LWIP_TCPIP_CORE_LOCKING         1
191*10465441SEvalZero #endif
192*10465441SEvalZero 
193*10465441SEvalZero /**
194*10465441SEvalZero  * LWIP_TCPIP_CORE_LOCKING_INPUT: when LWIP_TCPIP_CORE_LOCKING is enabled,
195*10465441SEvalZero  * this lets tcpip_input() grab the mutex for input packets as well,
196*10465441SEvalZero  * instead of allocating a message and passing it to tcpip_thread.
197*10465441SEvalZero  *
198*10465441SEvalZero  * ATTENTION: this does not work when tcpip_input() is called from
199*10465441SEvalZero  * interrupt context!
200*10465441SEvalZero  */
201*10465441SEvalZero #if !defined LWIP_TCPIP_CORE_LOCKING_INPUT || defined __DOXYGEN__
202*10465441SEvalZero #define LWIP_TCPIP_CORE_LOCKING_INPUT   0
203*10465441SEvalZero #endif
204*10465441SEvalZero 
205*10465441SEvalZero /**
206*10465441SEvalZero  * SYS_LIGHTWEIGHT_PROT==1: enable inter-task protection (and task-vs-interrupt
207*10465441SEvalZero  * protection) for certain critical regions during buffer allocation, deallocation
208*10465441SEvalZero  * and memory allocation and deallocation.
209*10465441SEvalZero  * ATTENTION: This is required when using lwIP from more than one context! If
210*10465441SEvalZero  * you disable this, you must be sure what you are doing!
211*10465441SEvalZero  */
212*10465441SEvalZero #if !defined SYS_LIGHTWEIGHT_PROT || defined __DOXYGEN__
213*10465441SEvalZero #define SYS_LIGHTWEIGHT_PROT            1
214*10465441SEvalZero #endif
215*10465441SEvalZero 
216*10465441SEvalZero /**
217*10465441SEvalZero  * Macro/function to check whether lwIP's threading/locking
218*10465441SEvalZero  * requirements are satisfied during current function call.
219*10465441SEvalZero  * This macro usually calls a function that is implemented in the OS-dependent
220*10465441SEvalZero  * sys layer and performs the following checks:
221*10465441SEvalZero  * - Not in ISR (this should be checked for NO_SYS==1, too!)
222*10465441SEvalZero  * - If @ref LWIP_TCPIP_CORE_LOCKING = 1: TCPIP core lock is held
223*10465441SEvalZero  * - If @ref LWIP_TCPIP_CORE_LOCKING = 0: function is called from TCPIP thread
224*10465441SEvalZero  * @see @ref multithreading
225*10465441SEvalZero  */
226*10465441SEvalZero #if !defined LWIP_ASSERT_CORE_LOCKED || defined __DOXYGEN__
227*10465441SEvalZero #define LWIP_ASSERT_CORE_LOCKED()
228*10465441SEvalZero #endif
229*10465441SEvalZero 
230*10465441SEvalZero /**
231*10465441SEvalZero  * Called as first thing in the lwIP TCPIP thread. Can be used in conjunction
232*10465441SEvalZero  * with @ref LWIP_ASSERT_CORE_LOCKED to check core locking.
233*10465441SEvalZero  * @see @ref multithreading
234*10465441SEvalZero  */
235*10465441SEvalZero #if !defined LWIP_MARK_TCPIP_THREAD || defined __DOXYGEN__
236*10465441SEvalZero #define LWIP_MARK_TCPIP_THREAD()
237*10465441SEvalZero #endif
238*10465441SEvalZero /**
239*10465441SEvalZero  * @}
240*10465441SEvalZero  */
241*10465441SEvalZero 
242*10465441SEvalZero /*
243*10465441SEvalZero    ------------------------------------
244*10465441SEvalZero    ---------- Memory options ----------
245*10465441SEvalZero    ------------------------------------
246*10465441SEvalZero */
247*10465441SEvalZero /**
248*10465441SEvalZero  * @defgroup lwip_opts_mem Heap and memory pools
249*10465441SEvalZero  * @ingroup lwip_opts_infrastructure
250*10465441SEvalZero  * @{
251*10465441SEvalZero  */
252*10465441SEvalZero /**
253*10465441SEvalZero  * MEM_LIBC_MALLOC==1: Use malloc/free/realloc provided by your C-library
254*10465441SEvalZero  * instead of the lwip internal allocator. Can save code size if you
255*10465441SEvalZero  * already use it.
256*10465441SEvalZero  */
257*10465441SEvalZero #if !defined MEM_LIBC_MALLOC || defined __DOXYGEN__
258*10465441SEvalZero #define MEM_LIBC_MALLOC                 0
259*10465441SEvalZero #endif
260*10465441SEvalZero 
261*10465441SEvalZero /**
262*10465441SEvalZero  * MEMP_MEM_MALLOC==1: Use mem_malloc/mem_free instead of the lwip pool allocator.
263*10465441SEvalZero  * Especially useful with MEM_LIBC_MALLOC but handle with care regarding execution
264*10465441SEvalZero  * speed (heap alloc can be much slower than pool alloc) and usage from interrupts
265*10465441SEvalZero  * (especially if your netif driver allocates PBUF_POOL pbufs for received frames
266*10465441SEvalZero  * from interrupt)!
267*10465441SEvalZero  * ATTENTION: Currently, this uses the heap for ALL pools (also for private pools,
268*10465441SEvalZero  * not only for internal pools defined in memp_std.h)!
269*10465441SEvalZero  */
270*10465441SEvalZero #if !defined MEMP_MEM_MALLOC || defined __DOXYGEN__
271*10465441SEvalZero #define MEMP_MEM_MALLOC                 0
272*10465441SEvalZero #endif
273*10465441SEvalZero 
274*10465441SEvalZero /**
275*10465441SEvalZero  * MEMP_MEM_INIT==1: Force use of memset to initialize pool memory.
276*10465441SEvalZero  * Useful if pool are moved in uninitialized section of memory. This will ensure
277*10465441SEvalZero  * default values in pcbs struct are well initialized in all conditions.
278*10465441SEvalZero  */
279*10465441SEvalZero #if !defined MEMP_MEM_INIT || defined __DOXYGEN__
280*10465441SEvalZero #define MEMP_MEM_INIT                   0
281*10465441SEvalZero #endif
282*10465441SEvalZero 
283*10465441SEvalZero /**
284*10465441SEvalZero  * MEM_ALIGNMENT: should be set to the alignment of the CPU
285*10465441SEvalZero  *    4 byte alignment -> \#define MEM_ALIGNMENT 4
286*10465441SEvalZero  *    2 byte alignment -> \#define MEM_ALIGNMENT 2
287*10465441SEvalZero  */
288*10465441SEvalZero #if !defined MEM_ALIGNMENT || defined __DOXYGEN__
289*10465441SEvalZero #define MEM_ALIGNMENT                   1
290*10465441SEvalZero #endif
291*10465441SEvalZero 
292*10465441SEvalZero /**
293*10465441SEvalZero  * MEM_SIZE: the size of the heap memory. If the application will send
294*10465441SEvalZero  * a lot of data that needs to be copied, this should be set high.
295*10465441SEvalZero  */
296*10465441SEvalZero #if !defined MEM_SIZE || defined __DOXYGEN__
297*10465441SEvalZero #define MEM_SIZE                        1600
298*10465441SEvalZero #endif
299*10465441SEvalZero 
300*10465441SEvalZero /**
301*10465441SEvalZero  * MEMP_OVERFLOW_CHECK: memp overflow protection reserves a configurable
302*10465441SEvalZero  * amount of bytes before and after each memp element in every pool and fills
303*10465441SEvalZero  * it with a prominent default value.
304*10465441SEvalZero  *    MEMP_OVERFLOW_CHECK == 0 no checking
305*10465441SEvalZero  *    MEMP_OVERFLOW_CHECK == 1 checks each element when it is freed
306*10465441SEvalZero  *    MEMP_OVERFLOW_CHECK >= 2 checks each element in every pool every time
307*10465441SEvalZero  *      memp_malloc() or memp_free() is called (useful but slow!)
308*10465441SEvalZero  */
309*10465441SEvalZero #if !defined MEMP_OVERFLOW_CHECK || defined __DOXYGEN__
310*10465441SEvalZero #define MEMP_OVERFLOW_CHECK             0
311*10465441SEvalZero #endif
312*10465441SEvalZero 
313*10465441SEvalZero /**
314*10465441SEvalZero  * MEMP_SANITY_CHECK==1: run a sanity check after each memp_free() to make
315*10465441SEvalZero  * sure that there are no cycles in the linked lists.
316*10465441SEvalZero  */
317*10465441SEvalZero #if !defined MEMP_SANITY_CHECK || defined __DOXYGEN__
318*10465441SEvalZero #define MEMP_SANITY_CHECK               0
319*10465441SEvalZero #endif
320*10465441SEvalZero 
321*10465441SEvalZero /**
322*10465441SEvalZero  * MEM_OVERFLOW_CHECK: mem overflow protection reserves a configurable
323*10465441SEvalZero  * amount of bytes before and after each heap allocation chunk and fills
324*10465441SEvalZero  * it with a prominent default value.
325*10465441SEvalZero  *    MEM_OVERFLOW_CHECK == 0 no checking
326*10465441SEvalZero  *    MEM_OVERFLOW_CHECK == 1 checks each element when it is freed
327*10465441SEvalZero  *    MEM_OVERFLOW_CHECK >= 2 checks all heap elements every time
328*10465441SEvalZero  *      mem_malloc() or mem_free() is called (useful but slow!)
329*10465441SEvalZero  */
330*10465441SEvalZero #if !defined MEM_OVERFLOW_CHECK || defined __DOXYGEN__
331*10465441SEvalZero #define MEM_OVERFLOW_CHECK              0
332*10465441SEvalZero #endif
333*10465441SEvalZero 
334*10465441SEvalZero /**
335*10465441SEvalZero  * MEM_SANITY_CHECK==1: run a sanity check after each mem_free() to make
336*10465441SEvalZero  * sure that the linked list of heap elements is not corrupted.
337*10465441SEvalZero  */
338*10465441SEvalZero #if !defined MEM_SANITY_CHECK || defined __DOXYGEN__
339*10465441SEvalZero #define MEM_SANITY_CHECK                0
340*10465441SEvalZero #endif
341*10465441SEvalZero 
342*10465441SEvalZero /**
343*10465441SEvalZero  * MEM_USE_POOLS==1: Use an alternative to malloc() by allocating from a set
344*10465441SEvalZero  * of memory pools of various sizes. When mem_malloc is called, an element of
345*10465441SEvalZero  * the smallest pool that can provide the length needed is returned.
346*10465441SEvalZero  * To use this, MEMP_USE_CUSTOM_POOLS also has to be enabled.
347*10465441SEvalZero  */
348*10465441SEvalZero #if !defined MEM_USE_POOLS || defined __DOXYGEN__
349*10465441SEvalZero #define MEM_USE_POOLS                   0
350*10465441SEvalZero #endif
351*10465441SEvalZero 
352*10465441SEvalZero /**
353*10465441SEvalZero  * MEM_USE_POOLS_TRY_BIGGER_POOL==1: if one malloc-pool is empty, try the next
354*10465441SEvalZero  * bigger pool - WARNING: THIS MIGHT WASTE MEMORY but it can make a system more
355*10465441SEvalZero  * reliable. */
356*10465441SEvalZero #if !defined MEM_USE_POOLS_TRY_BIGGER_POOL || defined __DOXYGEN__
357*10465441SEvalZero #define MEM_USE_POOLS_TRY_BIGGER_POOL   0
358*10465441SEvalZero #endif
359*10465441SEvalZero 
360*10465441SEvalZero /**
361*10465441SEvalZero  * MEMP_USE_CUSTOM_POOLS==1: whether to include a user file lwippools.h
362*10465441SEvalZero  * that defines additional pools beyond the "standard" ones required
363*10465441SEvalZero  * by lwIP. If you set this to 1, you must have lwippools.h in your
364*10465441SEvalZero  * include path somewhere.
365*10465441SEvalZero  */
366*10465441SEvalZero #if !defined MEMP_USE_CUSTOM_POOLS || defined __DOXYGEN__
367*10465441SEvalZero #define MEMP_USE_CUSTOM_POOLS           0
368*10465441SEvalZero #endif
369*10465441SEvalZero 
370*10465441SEvalZero /**
371*10465441SEvalZero  * Set this to 1 if you want to free PBUF_RAM pbufs (or call mem_free()) from
372*10465441SEvalZero  * interrupt context (or another context that doesn't allow waiting for a
373*10465441SEvalZero  * semaphore).
374*10465441SEvalZero  * If set to 1, mem_malloc will be protected by a semaphore and SYS_ARCH_PROTECT,
375*10465441SEvalZero  * while mem_free will only use SYS_ARCH_PROTECT. mem_malloc SYS_ARCH_UNPROTECTs
376*10465441SEvalZero  * with each loop so that mem_free can run.
377*10465441SEvalZero  *
378*10465441SEvalZero  * ATTENTION: As you can see from the above description, this leads to dis-/
379*10465441SEvalZero  * enabling interrupts often, which can be slow! Also, on low memory, mem_malloc
380*10465441SEvalZero  * can need longer.
381*10465441SEvalZero  *
382*10465441SEvalZero  * If you don't want that, at least for NO_SYS=0, you can still use the following
383*10465441SEvalZero  * functions to enqueue a deallocation call which then runs in the tcpip_thread
384*10465441SEvalZero  * context:
385*10465441SEvalZero  * - pbuf_free_callback(p);
386*10465441SEvalZero  * - mem_free_callback(m);
387*10465441SEvalZero  */
388*10465441SEvalZero #if !defined LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT || defined __DOXYGEN__
389*10465441SEvalZero #define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 0
390*10465441SEvalZero #endif
391*10465441SEvalZero /**
392*10465441SEvalZero  * @}
393*10465441SEvalZero  */
394*10465441SEvalZero 
395*10465441SEvalZero /*
396*10465441SEvalZero    ------------------------------------------------
397*10465441SEvalZero    ---------- Internal Memory Pool Sizes ----------
398*10465441SEvalZero    ------------------------------------------------
399*10465441SEvalZero */
400*10465441SEvalZero /**
401*10465441SEvalZero  * @defgroup lwip_opts_memp Internal memory pools
402*10465441SEvalZero  * @ingroup lwip_opts_infrastructure
403*10465441SEvalZero  * @{
404*10465441SEvalZero  */
405*10465441SEvalZero /**
406*10465441SEvalZero  * MEMP_NUM_PBUF: the number of memp struct pbufs (used for PBUF_ROM and PBUF_REF).
407*10465441SEvalZero  * If the application sends a lot of data out of ROM (or other static memory),
408*10465441SEvalZero  * this should be set high.
409*10465441SEvalZero  */
410*10465441SEvalZero #if !defined MEMP_NUM_PBUF || defined __DOXYGEN__
411*10465441SEvalZero #define MEMP_NUM_PBUF                   16
412*10465441SEvalZero #endif
413*10465441SEvalZero 
414*10465441SEvalZero /**
415*10465441SEvalZero  * MEMP_NUM_RAW_PCB: Number of raw connection PCBs
416*10465441SEvalZero  * (requires the LWIP_RAW option)
417*10465441SEvalZero  */
418*10465441SEvalZero #if !defined MEMP_NUM_RAW_PCB || defined __DOXYGEN__
419*10465441SEvalZero #define MEMP_NUM_RAW_PCB                4
420*10465441SEvalZero #endif
421*10465441SEvalZero 
422*10465441SEvalZero /**
423*10465441SEvalZero  * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
424*10465441SEvalZero  * per active UDP "connection".
425*10465441SEvalZero  * (requires the LWIP_UDP option)
426*10465441SEvalZero  */
427*10465441SEvalZero #if !defined MEMP_NUM_UDP_PCB || defined __DOXYGEN__
428*10465441SEvalZero #define MEMP_NUM_UDP_PCB                4
429*10465441SEvalZero #endif
430*10465441SEvalZero 
431*10465441SEvalZero /**
432*10465441SEvalZero  * MEMP_NUM_TCP_PCB: the number of simultaneously active TCP connections.
433*10465441SEvalZero  * (requires the LWIP_TCP option)
434*10465441SEvalZero  */
435*10465441SEvalZero #if !defined MEMP_NUM_TCP_PCB || defined __DOXYGEN__
436*10465441SEvalZero #define MEMP_NUM_TCP_PCB                5
437*10465441SEvalZero #endif
438*10465441SEvalZero 
439*10465441SEvalZero /**
440*10465441SEvalZero  * MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections.
441*10465441SEvalZero  * (requires the LWIP_TCP option)
442*10465441SEvalZero  */
443*10465441SEvalZero #if !defined MEMP_NUM_TCP_PCB_LISTEN || defined __DOXYGEN__
444*10465441SEvalZero #define MEMP_NUM_TCP_PCB_LISTEN         8
445*10465441SEvalZero #endif
446*10465441SEvalZero 
447*10465441SEvalZero /**
448*10465441SEvalZero  * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments.
449*10465441SEvalZero  * (requires the LWIP_TCP option)
450*10465441SEvalZero  */
451*10465441SEvalZero #if !defined MEMP_NUM_TCP_SEG || defined __DOXYGEN__
452*10465441SEvalZero #define MEMP_NUM_TCP_SEG                16
453*10465441SEvalZero #endif
454*10465441SEvalZero 
455*10465441SEvalZero /**
456*10465441SEvalZero  * MEMP_NUM_ALTCP_PCB: the number of simultaneously active altcp layer pcbs.
457*10465441SEvalZero  * (requires the LWIP_ALTCP option)
458*10465441SEvalZero  * Connections with multiple layers require more than one altcp_pcb (e.g. TLS
459*10465441SEvalZero  * over TCP requires 2 altcp_pcbs, one for TLS and one for TCP).
460*10465441SEvalZero  */
461*10465441SEvalZero #if !defined MEMP_NUM_ALTCP_PCB || defined __DOXYGEN__
462*10465441SEvalZero #define MEMP_NUM_ALTCP_PCB              MEMP_NUM_TCP_PCB
463*10465441SEvalZero #endif
464*10465441SEvalZero 
465*10465441SEvalZero /**
466*10465441SEvalZero  * MEMP_NUM_REASSDATA: the number of IP packets simultaneously queued for
467*10465441SEvalZero  * reassembly (whole packets, not fragments!)
468*10465441SEvalZero  */
469*10465441SEvalZero #if !defined MEMP_NUM_REASSDATA || defined __DOXYGEN__
470*10465441SEvalZero #define MEMP_NUM_REASSDATA              5
471*10465441SEvalZero #endif
472*10465441SEvalZero 
473*10465441SEvalZero /**
474*10465441SEvalZero  * MEMP_NUM_FRAG_PBUF: the number of IP fragments simultaneously sent
475*10465441SEvalZero  * (fragments, not whole packets!).
476*10465441SEvalZero  * This is only used with LWIP_NETIF_TX_SINGLE_PBUF==0 and only has to be > 1
477*10465441SEvalZero  * with DMA-enabled MACs where the packet is not yet sent when netif->output
478*10465441SEvalZero  * returns.
479*10465441SEvalZero  */
480*10465441SEvalZero #if !defined MEMP_NUM_FRAG_PBUF || defined __DOXYGEN__
481*10465441SEvalZero #define MEMP_NUM_FRAG_PBUF              15
482*10465441SEvalZero #endif
483*10465441SEvalZero 
484*10465441SEvalZero /**
485*10465441SEvalZero  * MEMP_NUM_ARP_QUEUE: the number of simultaneously queued outgoing
486*10465441SEvalZero  * packets (pbufs) that are waiting for an ARP request (to resolve
487*10465441SEvalZero  * their destination address) to finish.
488*10465441SEvalZero  * (requires the ARP_QUEUEING option)
489*10465441SEvalZero  */
490*10465441SEvalZero #if !defined MEMP_NUM_ARP_QUEUE || defined __DOXYGEN__
491*10465441SEvalZero #define MEMP_NUM_ARP_QUEUE              30
492*10465441SEvalZero #endif
493*10465441SEvalZero 
494*10465441SEvalZero /**
495*10465441SEvalZero  * MEMP_NUM_IGMP_GROUP: The number of multicast groups whose network interfaces
496*10465441SEvalZero  * can be members at the same time (one per netif - allsystems group -, plus one
497*10465441SEvalZero  * per netif membership).
498*10465441SEvalZero  * (requires the LWIP_IGMP option)
499*10465441SEvalZero  */
500*10465441SEvalZero #if !defined MEMP_NUM_IGMP_GROUP || defined __DOXYGEN__
501*10465441SEvalZero #define MEMP_NUM_IGMP_GROUP             8
502*10465441SEvalZero #endif
503*10465441SEvalZero 
504*10465441SEvalZero /**
505*10465441SEvalZero  * The number of sys timeouts used by the core stack (not apps)
506*10465441SEvalZero  * The default number of timeouts is calculated here for all enabled modules.
507*10465441SEvalZero  */
508*10465441SEvalZero #define LWIP_NUM_SYS_TIMEOUT_INTERNAL   (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + PPP_NUM_TIMEOUTS + (LWIP_IPV6 * (1 + LWIP_IPV6_REASS + LWIP_IPV6_MLD)))
509*10465441SEvalZero 
510*10465441SEvalZero /**
511*10465441SEvalZero  * MEMP_NUM_SYS_TIMEOUT: the number of simultaneously active timeouts.
512*10465441SEvalZero  * The default number of timeouts is calculated here for all enabled modules.
513*10465441SEvalZero  * The formula expects settings to be either '0' or '1'.
514*10465441SEvalZero  */
515*10465441SEvalZero #if !defined MEMP_NUM_SYS_TIMEOUT || defined __DOXYGEN__
516*10465441SEvalZero #define MEMP_NUM_SYS_TIMEOUT            LWIP_NUM_SYS_TIMEOUT_INTERNAL
517*10465441SEvalZero #endif
518*10465441SEvalZero 
519*10465441SEvalZero /**
520*10465441SEvalZero  * MEMP_NUM_NETBUF: the number of struct netbufs.
521*10465441SEvalZero  * (only needed if you use the sequential API, like api_lib.c)
522*10465441SEvalZero  */
523*10465441SEvalZero #if !defined MEMP_NUM_NETBUF || defined __DOXYGEN__
524*10465441SEvalZero #define MEMP_NUM_NETBUF                 2
525*10465441SEvalZero #endif
526*10465441SEvalZero 
527*10465441SEvalZero /**
528*10465441SEvalZero  * MEMP_NUM_NETCONN: the number of struct netconns.
529*10465441SEvalZero  * (only needed if you use the sequential API, like api_lib.c)
530*10465441SEvalZero  */
531*10465441SEvalZero #if !defined MEMP_NUM_NETCONN || defined __DOXYGEN__
532*10465441SEvalZero #define MEMP_NUM_NETCONN                4
533*10465441SEvalZero #endif
534*10465441SEvalZero 
535*10465441SEvalZero /**
536*10465441SEvalZero  * MEMP_NUM_SELECT_CB: the number of struct lwip_select_cb.
537*10465441SEvalZero  * (Only needed if you have LWIP_MPU_COMPATIBLE==1 and use the socket API.
538*10465441SEvalZero  * In that case, you need one per thread calling lwip_select.)
539*10465441SEvalZero  */
540*10465441SEvalZero #if !defined MEMP_NUM_SELECT_CB || defined __DOXYGEN__
541*10465441SEvalZero #define MEMP_NUM_SELECT_CB              4
542*10465441SEvalZero #endif
543*10465441SEvalZero 
544*10465441SEvalZero /**
545*10465441SEvalZero  * MEMP_NUM_TCPIP_MSG_API: the number of struct tcpip_msg, which are used
546*10465441SEvalZero  * for callback/timeout API communication.
547*10465441SEvalZero  * (only needed if you use tcpip.c)
548*10465441SEvalZero  */
549*10465441SEvalZero #if !defined MEMP_NUM_TCPIP_MSG_API || defined __DOXYGEN__
550*10465441SEvalZero #define MEMP_NUM_TCPIP_MSG_API          8
551*10465441SEvalZero #endif
552*10465441SEvalZero 
553*10465441SEvalZero /**
554*10465441SEvalZero  * MEMP_NUM_TCPIP_MSG_INPKT: the number of struct tcpip_msg, which are used
555*10465441SEvalZero  * for incoming packets.
556*10465441SEvalZero  * (only needed if you use tcpip.c)
557*10465441SEvalZero  */
558*10465441SEvalZero #if !defined MEMP_NUM_TCPIP_MSG_INPKT || defined __DOXYGEN__
559*10465441SEvalZero #define MEMP_NUM_TCPIP_MSG_INPKT        8
560*10465441SEvalZero #endif
561*10465441SEvalZero 
562*10465441SEvalZero /**
563*10465441SEvalZero  * MEMP_NUM_NETDB: the number of concurrently running lwip_addrinfo() calls
564*10465441SEvalZero  * (before freeing the corresponding memory using lwip_freeaddrinfo()).
565*10465441SEvalZero  */
566*10465441SEvalZero #if !defined MEMP_NUM_NETDB || defined __DOXYGEN__
567*10465441SEvalZero #define MEMP_NUM_NETDB                  1
568*10465441SEvalZero #endif
569*10465441SEvalZero 
570*10465441SEvalZero /**
571*10465441SEvalZero  * MEMP_NUM_LOCALHOSTLIST: the number of host entries in the local host list
572*10465441SEvalZero  * if DNS_LOCAL_HOSTLIST_IS_DYNAMIC==1.
573*10465441SEvalZero  */
574*10465441SEvalZero #if !defined MEMP_NUM_LOCALHOSTLIST || defined __DOXYGEN__
575*10465441SEvalZero #define MEMP_NUM_LOCALHOSTLIST          1
576*10465441SEvalZero #endif
577*10465441SEvalZero 
578*10465441SEvalZero /**
579*10465441SEvalZero  * PBUF_POOL_SIZE: the number of buffers in the pbuf pool.
580*10465441SEvalZero  */
581*10465441SEvalZero #if !defined PBUF_POOL_SIZE || defined __DOXYGEN__
582*10465441SEvalZero #define PBUF_POOL_SIZE                  16
583*10465441SEvalZero #endif
584*10465441SEvalZero 
585*10465441SEvalZero /** MEMP_NUM_API_MSG: the number of concurrently active calls to various
586*10465441SEvalZero  * socket, netconn, and tcpip functions
587*10465441SEvalZero  */
588*10465441SEvalZero #if !defined MEMP_NUM_API_MSG || defined __DOXYGEN__
589*10465441SEvalZero #define MEMP_NUM_API_MSG                MEMP_NUM_TCPIP_MSG_API
590*10465441SEvalZero #endif
591*10465441SEvalZero 
592*10465441SEvalZero /** MEMP_NUM_DNS_API_MSG: the number of concurrently active calls to netconn_gethostbyname
593*10465441SEvalZero  */
594*10465441SEvalZero #if !defined MEMP_NUM_DNS_API_MSG || defined __DOXYGEN__
595*10465441SEvalZero #define MEMP_NUM_DNS_API_MSG            MEMP_NUM_TCPIP_MSG_API
596*10465441SEvalZero #endif
597*10465441SEvalZero 
598*10465441SEvalZero /** MEMP_NUM_SOCKET_SETGETSOCKOPT_DATA: the number of concurrently active calls
599*10465441SEvalZero  * to getsockopt/setsockopt
600*10465441SEvalZero  */
601*10465441SEvalZero #if !defined MEMP_NUM_SOCKET_SETGETSOCKOPT_DATA || defined __DOXYGEN__
602*10465441SEvalZero #define MEMP_NUM_SOCKET_SETGETSOCKOPT_DATA MEMP_NUM_TCPIP_MSG_API
603*10465441SEvalZero #endif
604*10465441SEvalZero 
605*10465441SEvalZero /** MEMP_NUM_NETIFAPI_MSG: the number of concurrently active calls to the
606*10465441SEvalZero  * netifapi functions
607*10465441SEvalZero  */
608*10465441SEvalZero #if !defined MEMP_NUM_NETIFAPI_MSG || defined __DOXYGEN__
609*10465441SEvalZero #define MEMP_NUM_NETIFAPI_MSG           MEMP_NUM_TCPIP_MSG_API
610*10465441SEvalZero #endif
611*10465441SEvalZero /**
612*10465441SEvalZero  * @}
613*10465441SEvalZero  */
614*10465441SEvalZero 
615*10465441SEvalZero /*
616*10465441SEvalZero    ---------------------------------
617*10465441SEvalZero    ---------- ARP options ----------
618*10465441SEvalZero    ---------------------------------
619*10465441SEvalZero */
620*10465441SEvalZero /**
621*10465441SEvalZero  * @defgroup lwip_opts_arp ARP
622*10465441SEvalZero  * @ingroup lwip_opts_ipv4
623*10465441SEvalZero  * @{
624*10465441SEvalZero  */
625*10465441SEvalZero /**
626*10465441SEvalZero  * LWIP_ARP==1: Enable ARP functionality.
627*10465441SEvalZero  */
628*10465441SEvalZero #if !defined LWIP_ARP || defined __DOXYGEN__
629*10465441SEvalZero #define LWIP_ARP                        1
630*10465441SEvalZero #endif
631*10465441SEvalZero 
632*10465441SEvalZero /**
633*10465441SEvalZero  * ARP_TABLE_SIZE: Number of active MAC-IP address pairs cached.
634*10465441SEvalZero  */
635*10465441SEvalZero #if !defined ARP_TABLE_SIZE || defined __DOXYGEN__
636*10465441SEvalZero #define ARP_TABLE_SIZE                  10
637*10465441SEvalZero #endif
638*10465441SEvalZero 
639*10465441SEvalZero /** the time an ARP entry stays valid after its last update,
640*10465441SEvalZero  *  for ARP_TMR_INTERVAL = 1000, this is
641*10465441SEvalZero  *  (60 * 5) seconds = 5 minutes.
642*10465441SEvalZero  */
643*10465441SEvalZero #if !defined ARP_MAXAGE || defined __DOXYGEN__
644*10465441SEvalZero #define ARP_MAXAGE                      300
645*10465441SEvalZero #endif
646*10465441SEvalZero 
647*10465441SEvalZero /**
648*10465441SEvalZero  * ARP_QUEUEING==1: Multiple outgoing packets are queued during hardware address
649*10465441SEvalZero  * resolution. By default, only the most recent packet is queued per IP address.
650*10465441SEvalZero  * This is sufficient for most protocols and mainly reduces TCP connection
651*10465441SEvalZero  * startup time. Set this to 1 if you know your application sends more than one
652*10465441SEvalZero  * packet in a row to an IP address that is not in the ARP cache.
653*10465441SEvalZero  */
654*10465441SEvalZero #if !defined ARP_QUEUEING || defined __DOXYGEN__
655*10465441SEvalZero #define ARP_QUEUEING                    0
656*10465441SEvalZero #endif
657*10465441SEvalZero 
658*10465441SEvalZero /** The maximum number of packets which may be queued for each
659*10465441SEvalZero  *  unresolved address by other network layers. Defaults to 3, 0 means disabled.
660*10465441SEvalZero  *  Old packets are dropped, new packets are queued.
661*10465441SEvalZero  */
662*10465441SEvalZero #if !defined ARP_QUEUE_LEN || defined __DOXYGEN__
663*10465441SEvalZero #define ARP_QUEUE_LEN                   3
664*10465441SEvalZero #endif
665*10465441SEvalZero 
666*10465441SEvalZero /**
667*10465441SEvalZero  * ETHARP_SUPPORT_VLAN==1: support receiving and sending ethernet packets with
668*10465441SEvalZero  * VLAN header. See the description of LWIP_HOOK_VLAN_CHECK and
669*10465441SEvalZero  * LWIP_HOOK_VLAN_SET hooks to check/set VLAN headers.
670*10465441SEvalZero  * Additionally, you can define ETHARP_VLAN_CHECK to an u16_t VLAN ID to check.
671*10465441SEvalZero  * If ETHARP_VLAN_CHECK is defined, only VLAN-traffic for this VLAN is accepted.
672*10465441SEvalZero  * If ETHARP_VLAN_CHECK is not defined, all traffic is accepted.
673*10465441SEvalZero  * Alternatively, define a function/define ETHARP_VLAN_CHECK_FN(eth_hdr, vlan)
674*10465441SEvalZero  * that returns 1 to accept a packet or 0 to drop a packet.
675*10465441SEvalZero  */
676*10465441SEvalZero #if !defined ETHARP_SUPPORT_VLAN || defined __DOXYGEN__
677*10465441SEvalZero #define ETHARP_SUPPORT_VLAN             0
678*10465441SEvalZero #endif
679*10465441SEvalZero 
680*10465441SEvalZero /** LWIP_ETHERNET==1: enable ethernet support even though ARP might be disabled
681*10465441SEvalZero  */
682*10465441SEvalZero #if !defined LWIP_ETHERNET || defined __DOXYGEN__
683*10465441SEvalZero #define LWIP_ETHERNET                   LWIP_ARP
684*10465441SEvalZero #endif
685*10465441SEvalZero 
686*10465441SEvalZero /** ETH_PAD_SIZE: number of bytes added before the ethernet header to ensure
687*10465441SEvalZero  * alignment of payload after that header. Since the header is 14 bytes long,
688*10465441SEvalZero  * without this padding e.g. addresses in the IP header will not be aligned
689*10465441SEvalZero  * on a 32-bit boundary, so setting this to 2 can speed up 32-bit-platforms.
690*10465441SEvalZero  */
691*10465441SEvalZero #if !defined ETH_PAD_SIZE || defined __DOXYGEN__
692*10465441SEvalZero #define ETH_PAD_SIZE                    0
693*10465441SEvalZero #endif
694*10465441SEvalZero 
695*10465441SEvalZero /** ETHARP_SUPPORT_STATIC_ENTRIES==1: enable code to support static ARP table
696*10465441SEvalZero  * entries (using etharp_add_static_entry/etharp_remove_static_entry).
697*10465441SEvalZero  */
698*10465441SEvalZero #if !defined ETHARP_SUPPORT_STATIC_ENTRIES || defined __DOXYGEN__
699*10465441SEvalZero #define ETHARP_SUPPORT_STATIC_ENTRIES   0
700*10465441SEvalZero #endif
701*10465441SEvalZero 
702*10465441SEvalZero /** ETHARP_TABLE_MATCH_NETIF==1: Match netif for ARP table entries.
703*10465441SEvalZero  * If disabled, duplicate IP address on multiple netifs are not supported
704*10465441SEvalZero  * (but this should only occur for AutoIP).
705*10465441SEvalZero  */
706*10465441SEvalZero #if !defined ETHARP_TABLE_MATCH_NETIF || defined __DOXYGEN__
707*10465441SEvalZero #define ETHARP_TABLE_MATCH_NETIF        !LWIP_SINGLE_NETIF
708*10465441SEvalZero #endif
709*10465441SEvalZero /**
710*10465441SEvalZero  * @}
711*10465441SEvalZero  */
712*10465441SEvalZero 
713*10465441SEvalZero /*
714*10465441SEvalZero    --------------------------------
715*10465441SEvalZero    ---------- IP options ----------
716*10465441SEvalZero    --------------------------------
717*10465441SEvalZero */
718*10465441SEvalZero /**
719*10465441SEvalZero  * @defgroup lwip_opts_ipv4 IPv4
720*10465441SEvalZero  * @ingroup lwip_opts
721*10465441SEvalZero  * @{
722*10465441SEvalZero  */
723*10465441SEvalZero /**
724*10465441SEvalZero  * LWIP_IPV4==1: Enable IPv4
725*10465441SEvalZero  */
726*10465441SEvalZero #if !defined LWIP_IPV4 || defined __DOXYGEN__
727*10465441SEvalZero #define LWIP_IPV4                       1
728*10465441SEvalZero #endif
729*10465441SEvalZero 
730*10465441SEvalZero /**
731*10465441SEvalZero  * IP_FORWARD==1: Enables the ability to forward IP packets across network
732*10465441SEvalZero  * interfaces. If you are going to run lwIP on a device with only one network
733*10465441SEvalZero  * interface, define this to 0.
734*10465441SEvalZero  */
735*10465441SEvalZero #if !defined IP_FORWARD || defined __DOXYGEN__
736*10465441SEvalZero #define IP_FORWARD                      0
737*10465441SEvalZero #endif
738*10465441SEvalZero 
739*10465441SEvalZero /**
740*10465441SEvalZero  * IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that
741*10465441SEvalZero  * this option does not affect outgoing packet sizes, which can be controlled
742*10465441SEvalZero  * via IP_FRAG.
743*10465441SEvalZero  */
744*10465441SEvalZero #if !defined IP_REASSEMBLY || defined __DOXYGEN__
745*10465441SEvalZero #define IP_REASSEMBLY                   1
746*10465441SEvalZero #endif
747*10465441SEvalZero 
748*10465441SEvalZero /**
749*10465441SEvalZero  * IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note
750*10465441SEvalZero  * that this option does not affect incoming packet sizes, which can be
751*10465441SEvalZero  * controlled via IP_REASSEMBLY.
752*10465441SEvalZero  */
753*10465441SEvalZero #if !defined IP_FRAG || defined __DOXYGEN__
754*10465441SEvalZero #define IP_FRAG                         1
755*10465441SEvalZero #endif
756*10465441SEvalZero 
757*10465441SEvalZero #if !LWIP_IPV4
758*10465441SEvalZero /* disable IPv4 extensions when IPv4 is disabled */
759*10465441SEvalZero #undef IP_FORWARD
760*10465441SEvalZero #define IP_FORWARD                      0
761*10465441SEvalZero #undef IP_REASSEMBLY
762*10465441SEvalZero #define IP_REASSEMBLY                   0
763*10465441SEvalZero #undef IP_FRAG
764*10465441SEvalZero #define IP_FRAG                         0
765*10465441SEvalZero #endif /* !LWIP_IPV4 */
766*10465441SEvalZero 
767*10465441SEvalZero /**
768*10465441SEvalZero  * IP_OPTIONS_ALLOWED: Defines the behavior for IP options.
769*10465441SEvalZero  *      IP_OPTIONS_ALLOWED==0: All packets with IP options are dropped.
770*10465441SEvalZero  *      IP_OPTIONS_ALLOWED==1: IP options are allowed (but not parsed).
771*10465441SEvalZero  */
772*10465441SEvalZero #if !defined IP_OPTIONS_ALLOWED || defined __DOXYGEN__
773*10465441SEvalZero #define IP_OPTIONS_ALLOWED              1
774*10465441SEvalZero #endif
775*10465441SEvalZero 
776*10465441SEvalZero /**
777*10465441SEvalZero  * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally)
778*10465441SEvalZero  * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived
779*10465441SEvalZero  * in this time, the whole packet is discarded.
780*10465441SEvalZero  */
781*10465441SEvalZero #if !defined IP_REASS_MAXAGE || defined __DOXYGEN__
782*10465441SEvalZero #define IP_REASS_MAXAGE                 15
783*10465441SEvalZero #endif
784*10465441SEvalZero 
785*10465441SEvalZero /**
786*10465441SEvalZero  * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled.
787*10465441SEvalZero  * Since the received pbufs are enqueued, be sure to configure
788*10465441SEvalZero  * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive
789*10465441SEvalZero  * packets even if the maximum amount of fragments is enqueued for reassembly!
790*10465441SEvalZero  * When IPv4 *and* IPv6 are enabled, this even changes to
791*10465441SEvalZero  * (PBUF_POOL_SIZE > 2 * IP_REASS_MAX_PBUFS)!
792*10465441SEvalZero  */
793*10465441SEvalZero #if !defined IP_REASS_MAX_PBUFS || defined __DOXYGEN__
794*10465441SEvalZero #define IP_REASS_MAX_PBUFS              10
795*10465441SEvalZero #endif
796*10465441SEvalZero 
797*10465441SEvalZero /**
798*10465441SEvalZero  * IP_DEFAULT_TTL: Default value for Time-To-Live used by transport layers.
799*10465441SEvalZero  */
800*10465441SEvalZero #if !defined IP_DEFAULT_TTL || defined __DOXYGEN__
801*10465441SEvalZero #define IP_DEFAULT_TTL                  255
802*10465441SEvalZero #endif
803*10465441SEvalZero 
804*10465441SEvalZero /**
805*10465441SEvalZero  * IP_SOF_BROADCAST=1: Use the SOF_BROADCAST field to enable broadcast
806*10465441SEvalZero  * filter per pcb on udp and raw send operations. To enable broadcast filter
807*10465441SEvalZero  * on recv operations, you also have to set IP_SOF_BROADCAST_RECV=1.
808*10465441SEvalZero  */
809*10465441SEvalZero #if !defined IP_SOF_BROADCAST || defined __DOXYGEN__
810*10465441SEvalZero #define IP_SOF_BROADCAST                0
811*10465441SEvalZero #endif
812*10465441SEvalZero 
813*10465441SEvalZero /**
814*10465441SEvalZero  * IP_SOF_BROADCAST_RECV (requires IP_SOF_BROADCAST=1) enable the broadcast
815*10465441SEvalZero  * filter on recv operations.
816*10465441SEvalZero  */
817*10465441SEvalZero #if !defined IP_SOF_BROADCAST_RECV || defined __DOXYGEN__
818*10465441SEvalZero #define IP_SOF_BROADCAST_RECV           0
819*10465441SEvalZero #endif
820*10465441SEvalZero 
821*10465441SEvalZero /**
822*10465441SEvalZero  * IP_FORWARD_ALLOW_TX_ON_RX_NETIF==1: allow ip_forward() to send packets back
823*10465441SEvalZero  * out on the netif where it was received. This should only be used for
824*10465441SEvalZero  * wireless networks.
825*10465441SEvalZero  * ATTENTION: When this is 1, make sure your netif driver correctly marks incoming
826*10465441SEvalZero  * link-layer-broadcast/multicast packets as such using the corresponding pbuf flags!
827*10465441SEvalZero  */
828*10465441SEvalZero #if !defined IP_FORWARD_ALLOW_TX_ON_RX_NETIF || defined __DOXYGEN__
829*10465441SEvalZero #define IP_FORWARD_ALLOW_TX_ON_RX_NETIF 0
830*10465441SEvalZero #endif
831*10465441SEvalZero /**
832*10465441SEvalZero  * @}
833*10465441SEvalZero  */
834*10465441SEvalZero 
835*10465441SEvalZero /*
836*10465441SEvalZero    ----------------------------------
837*10465441SEvalZero    ---------- ICMP options ----------
838*10465441SEvalZero    ----------------------------------
839*10465441SEvalZero */
840*10465441SEvalZero /**
841*10465441SEvalZero  * @defgroup lwip_opts_icmp ICMP
842*10465441SEvalZero  * @ingroup lwip_opts_ipv4
843*10465441SEvalZero  * @{
844*10465441SEvalZero  */
845*10465441SEvalZero /**
846*10465441SEvalZero  * LWIP_ICMP==1: Enable ICMP module inside the IP stack.
847*10465441SEvalZero  * Be careful, disable that make your product non-compliant to RFC1122
848*10465441SEvalZero  */
849*10465441SEvalZero #if !defined LWIP_ICMP || defined __DOXYGEN__
850*10465441SEvalZero #define LWIP_ICMP                       1
851*10465441SEvalZero #endif
852*10465441SEvalZero 
853*10465441SEvalZero /**
854*10465441SEvalZero  * ICMP_TTL: Default value for Time-To-Live used by ICMP packets.
855*10465441SEvalZero  */
856*10465441SEvalZero #if !defined ICMP_TTL || defined __DOXYGEN__
857*10465441SEvalZero #define ICMP_TTL                        IP_DEFAULT_TTL
858*10465441SEvalZero #endif
859*10465441SEvalZero 
860*10465441SEvalZero /**
861*10465441SEvalZero  * LWIP_BROADCAST_PING==1: respond to broadcast pings (default is unicast only)
862*10465441SEvalZero  */
863*10465441SEvalZero #if !defined LWIP_BROADCAST_PING || defined __DOXYGEN__
864*10465441SEvalZero #define LWIP_BROADCAST_PING             0
865*10465441SEvalZero #endif
866*10465441SEvalZero 
867*10465441SEvalZero /**
868*10465441SEvalZero  * LWIP_MULTICAST_PING==1: respond to multicast pings (default is unicast only)
869*10465441SEvalZero  */
870*10465441SEvalZero #if !defined LWIP_MULTICAST_PING || defined __DOXYGEN__
871*10465441SEvalZero #define LWIP_MULTICAST_PING             0
872*10465441SEvalZero #endif
873*10465441SEvalZero /**
874*10465441SEvalZero  * @}
875*10465441SEvalZero  */
876*10465441SEvalZero 
877*10465441SEvalZero /*
878*10465441SEvalZero    ---------------------------------
879*10465441SEvalZero    ---------- RAW options ----------
880*10465441SEvalZero    ---------------------------------
881*10465441SEvalZero */
882*10465441SEvalZero /**
883*10465441SEvalZero  * @defgroup lwip_opts_raw RAW
884*10465441SEvalZero  * @ingroup lwip_opts_callback
885*10465441SEvalZero  * @{
886*10465441SEvalZero  */
887*10465441SEvalZero /**
888*10465441SEvalZero  * LWIP_RAW==1: Enable application layer to hook into the IP layer itself.
889*10465441SEvalZero  */
890*10465441SEvalZero #if !defined LWIP_RAW || defined __DOXYGEN__
891*10465441SEvalZero #define LWIP_RAW                        0
892*10465441SEvalZero #endif
893*10465441SEvalZero 
894*10465441SEvalZero /**
895*10465441SEvalZero  * LWIP_RAW==1: Enable application layer to hook into the IP layer itself.
896*10465441SEvalZero  */
897*10465441SEvalZero #if !defined RAW_TTL || defined __DOXYGEN__
898*10465441SEvalZero #define RAW_TTL                         IP_DEFAULT_TTL
899*10465441SEvalZero #endif
900*10465441SEvalZero /**
901*10465441SEvalZero  * @}
902*10465441SEvalZero  */
903*10465441SEvalZero 
904*10465441SEvalZero /*
905*10465441SEvalZero    ----------------------------------
906*10465441SEvalZero    ---------- DHCP options ----------
907*10465441SEvalZero    ----------------------------------
908*10465441SEvalZero */
909*10465441SEvalZero /**
910*10465441SEvalZero  * @defgroup lwip_opts_dhcp DHCP
911*10465441SEvalZero  * @ingroup lwip_opts_ipv4
912*10465441SEvalZero  * @{
913*10465441SEvalZero  */
914*10465441SEvalZero /**
915*10465441SEvalZero  * LWIP_DHCP==1: Enable DHCP module.
916*10465441SEvalZero  */
917*10465441SEvalZero #if !defined LWIP_DHCP || defined __DOXYGEN__
918*10465441SEvalZero #define LWIP_DHCP                       0
919*10465441SEvalZero #endif
920*10465441SEvalZero #if !LWIP_IPV4
921*10465441SEvalZero /* disable DHCP when IPv4 is disabled */
922*10465441SEvalZero #undef LWIP_DHCP
923*10465441SEvalZero #define LWIP_DHCP                       0
924*10465441SEvalZero #endif /* !LWIP_IPV4 */
925*10465441SEvalZero 
926*10465441SEvalZero /**
927*10465441SEvalZero  * DHCP_DOES_ARP_CHECK==1: Do an ARP check on the offered address.
928*10465441SEvalZero  */
929*10465441SEvalZero #if !defined DHCP_DOES_ARP_CHECK || defined __DOXYGEN__
930*10465441SEvalZero #define DHCP_DOES_ARP_CHECK             (LWIP_DHCP && LWIP_ARP)
931*10465441SEvalZero #endif
932*10465441SEvalZero 
933*10465441SEvalZero /**
934*10465441SEvalZero  * LWIP_DHCP_BOOTP_FILE==1: Store offered_si_addr and boot_file_name.
935*10465441SEvalZero  */
936*10465441SEvalZero #if !defined LWIP_DHCP_BOOTP_FILE || defined __DOXYGEN__
937*10465441SEvalZero #define LWIP_DHCP_BOOTP_FILE            0
938*10465441SEvalZero #endif
939*10465441SEvalZero 
940*10465441SEvalZero /**
941*10465441SEvalZero  * LWIP_DHCP_GETS_NTP==1: Request NTP servers with discover/select. For each
942*10465441SEvalZero  * response packet, an callback is called, which has to be provided by the port:
943*10465441SEvalZero  * void dhcp_set_ntp_servers(u8_t num_ntp_servers, ip_addr_t* ntp_server_addrs);
944*10465441SEvalZero */
945*10465441SEvalZero #if !defined LWIP_DHCP_GET_NTP_SRV || defined __DOXYGEN__
946*10465441SEvalZero #define LWIP_DHCP_GET_NTP_SRV           0
947*10465441SEvalZero #endif
948*10465441SEvalZero 
949*10465441SEvalZero /**
950*10465441SEvalZero  * The maximum of NTP servers requested
951*10465441SEvalZero  */
952*10465441SEvalZero #if !defined LWIP_DHCP_MAX_NTP_SERVERS || defined __DOXYGEN__
953*10465441SEvalZero #define LWIP_DHCP_MAX_NTP_SERVERS       1
954*10465441SEvalZero #endif
955*10465441SEvalZero 
956*10465441SEvalZero /**
957*10465441SEvalZero  * LWIP_DHCP_MAX_DNS_SERVERS > 0: Request DNS servers with discover/select.
958*10465441SEvalZero  * DNS servers received in the response are passed to DNS via @ref dns_setserver()
959*10465441SEvalZero  * (up to the maximum limit defined here).
960*10465441SEvalZero  */
961*10465441SEvalZero #if !defined LWIP_DHCP_MAX_DNS_SERVERS || defined __DOXYGEN__
962*10465441SEvalZero #define LWIP_DHCP_MAX_DNS_SERVERS       DNS_MAX_SERVERS
963*10465441SEvalZero #endif
964*10465441SEvalZero /**
965*10465441SEvalZero  * @}
966*10465441SEvalZero  */
967*10465441SEvalZero 
968*10465441SEvalZero /*
969*10465441SEvalZero    ------------------------------------
970*10465441SEvalZero    ---------- AUTOIP options ----------
971*10465441SEvalZero    ------------------------------------
972*10465441SEvalZero */
973*10465441SEvalZero /**
974*10465441SEvalZero  * @defgroup lwip_opts_autoip AUTOIP
975*10465441SEvalZero  * @ingroup lwip_opts_ipv4
976*10465441SEvalZero  * @{
977*10465441SEvalZero  */
978*10465441SEvalZero /**
979*10465441SEvalZero  * LWIP_AUTOIP==1: Enable AUTOIP module.
980*10465441SEvalZero  */
981*10465441SEvalZero #if !defined LWIP_AUTOIP || defined __DOXYGEN__
982*10465441SEvalZero #define LWIP_AUTOIP                     0
983*10465441SEvalZero #endif
984*10465441SEvalZero #if !LWIP_IPV4
985*10465441SEvalZero /* disable AUTOIP when IPv4 is disabled */
986*10465441SEvalZero #undef LWIP_AUTOIP
987*10465441SEvalZero #define LWIP_AUTOIP                     0
988*10465441SEvalZero #endif /* !LWIP_IPV4 */
989*10465441SEvalZero 
990*10465441SEvalZero /**
991*10465441SEvalZero  * LWIP_DHCP_AUTOIP_COOP==1: Allow DHCP and AUTOIP to be both enabled on
992*10465441SEvalZero  * the same interface at the same time.
993*10465441SEvalZero  */
994*10465441SEvalZero #if !defined LWIP_DHCP_AUTOIP_COOP || defined __DOXYGEN__
995*10465441SEvalZero #define LWIP_DHCP_AUTOIP_COOP           0
996*10465441SEvalZero #endif
997*10465441SEvalZero 
998*10465441SEvalZero /**
999*10465441SEvalZero  * LWIP_DHCP_AUTOIP_COOP_TRIES: Set to the number of DHCP DISCOVER probes
1000*10465441SEvalZero  * that should be sent before falling back on AUTOIP (the DHCP client keeps
1001*10465441SEvalZero  * running in this case). This can be set as low as 1 to get an AutoIP address
1002*10465441SEvalZero  * very  quickly, but you should be prepared to handle a changing IP address
1003*10465441SEvalZero  * when DHCP overrides AutoIP.
1004*10465441SEvalZero  */
1005*10465441SEvalZero #if !defined LWIP_DHCP_AUTOIP_COOP_TRIES || defined __DOXYGEN__
1006*10465441SEvalZero #define LWIP_DHCP_AUTOIP_COOP_TRIES     9
1007*10465441SEvalZero #endif
1008*10465441SEvalZero /**
1009*10465441SEvalZero  * @}
1010*10465441SEvalZero  */
1011*10465441SEvalZero 
1012*10465441SEvalZero /*
1013*10465441SEvalZero    ----------------------------------
1014*10465441SEvalZero    ----- SNMP MIB2 support      -----
1015*10465441SEvalZero    ----------------------------------
1016*10465441SEvalZero */
1017*10465441SEvalZero /**
1018*10465441SEvalZero  * @defgroup lwip_opts_mib2 SNMP MIB2 callbacks
1019*10465441SEvalZero  * @ingroup lwip_opts_infrastructure
1020*10465441SEvalZero  * @{
1021*10465441SEvalZero  */
1022*10465441SEvalZero /**
1023*10465441SEvalZero  * LWIP_MIB2_CALLBACKS==1: Turn on SNMP MIB2 callbacks.
1024*10465441SEvalZero  * Turn this on to get callbacks needed to implement MIB2.
1025*10465441SEvalZero  * Usually MIB2_STATS should be enabled, too.
1026*10465441SEvalZero  */
1027*10465441SEvalZero #if !defined LWIP_MIB2_CALLBACKS || defined __DOXYGEN__
1028*10465441SEvalZero #define LWIP_MIB2_CALLBACKS             0
1029*10465441SEvalZero #endif
1030*10465441SEvalZero /**
1031*10465441SEvalZero  * @}
1032*10465441SEvalZero  */
1033*10465441SEvalZero 
1034*10465441SEvalZero /*
1035*10465441SEvalZero    ----------------------------------
1036*10465441SEvalZero    -------- Multicast options -------
1037*10465441SEvalZero    ----------------------------------
1038*10465441SEvalZero */
1039*10465441SEvalZero /**
1040*10465441SEvalZero  * @defgroup lwip_opts_multicast Multicast
1041*10465441SEvalZero  * @ingroup lwip_opts_infrastructure
1042*10465441SEvalZero  * @{
1043*10465441SEvalZero  */
1044*10465441SEvalZero /**
1045*10465441SEvalZero  * LWIP_MULTICAST_TX_OPTIONS==1: Enable multicast TX support like the socket options
1046*10465441SEvalZero  * IP_MULTICAST_TTL/IP_MULTICAST_IF/IP_MULTICAST_LOOP, as well as (currently only)
1047*10465441SEvalZero  * core support for the corresponding IPv6 options.
1048*10465441SEvalZero  */
1049*10465441SEvalZero #if !defined LWIP_MULTICAST_TX_OPTIONS || defined __DOXYGEN__
1050*10465441SEvalZero #define LWIP_MULTICAST_TX_OPTIONS       ((LWIP_IGMP || LWIP_IPV6_MLD) && (LWIP_UDP || LWIP_RAW))
1051*10465441SEvalZero #endif
1052*10465441SEvalZero /**
1053*10465441SEvalZero  * @}
1054*10465441SEvalZero  */
1055*10465441SEvalZero 
1056*10465441SEvalZero /*
1057*10465441SEvalZero    ----------------------------------
1058*10465441SEvalZero    ---------- IGMP options ----------
1059*10465441SEvalZero    ----------------------------------
1060*10465441SEvalZero */
1061*10465441SEvalZero /**
1062*10465441SEvalZero  * @defgroup lwip_opts_igmp IGMP
1063*10465441SEvalZero  * @ingroup lwip_opts_ipv4
1064*10465441SEvalZero  * @{
1065*10465441SEvalZero  */
1066*10465441SEvalZero /**
1067*10465441SEvalZero  * LWIP_IGMP==1: Turn on IGMP module.
1068*10465441SEvalZero  */
1069*10465441SEvalZero #if !defined LWIP_IGMP || defined __DOXYGEN__
1070*10465441SEvalZero #define LWIP_IGMP                       0
1071*10465441SEvalZero #endif
1072*10465441SEvalZero #if !LWIP_IPV4
1073*10465441SEvalZero #undef LWIP_IGMP
1074*10465441SEvalZero #define LWIP_IGMP                       0
1075*10465441SEvalZero #endif
1076*10465441SEvalZero /**
1077*10465441SEvalZero  * @}
1078*10465441SEvalZero  */
1079*10465441SEvalZero 
1080*10465441SEvalZero /*
1081*10465441SEvalZero    ----------------------------------
1082*10465441SEvalZero    ---------- DNS options -----------
1083*10465441SEvalZero    ----------------------------------
1084*10465441SEvalZero */
1085*10465441SEvalZero /**
1086*10465441SEvalZero  * @defgroup lwip_opts_dns DNS
1087*10465441SEvalZero  * @ingroup lwip_opts_callback
1088*10465441SEvalZero  * @{
1089*10465441SEvalZero  */
1090*10465441SEvalZero /**
1091*10465441SEvalZero  * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS
1092*10465441SEvalZero  * transport.
1093*10465441SEvalZero  */
1094*10465441SEvalZero #if !defined LWIP_DNS || defined __DOXYGEN__
1095*10465441SEvalZero #define LWIP_DNS                        0
1096*10465441SEvalZero #endif
1097*10465441SEvalZero 
1098*10465441SEvalZero /** DNS maximum number of entries to maintain locally. */
1099*10465441SEvalZero #if !defined DNS_TABLE_SIZE || defined __DOXYGEN__
1100*10465441SEvalZero #define DNS_TABLE_SIZE                  4
1101*10465441SEvalZero #endif
1102*10465441SEvalZero 
1103*10465441SEvalZero /** DNS maximum host name length supported in the name table. */
1104*10465441SEvalZero #if !defined DNS_MAX_NAME_LENGTH || defined __DOXYGEN__
1105*10465441SEvalZero #define DNS_MAX_NAME_LENGTH             256
1106*10465441SEvalZero #endif
1107*10465441SEvalZero 
1108*10465441SEvalZero /** The maximum of DNS servers
1109*10465441SEvalZero  * The first server can be initialized automatically by defining
1110*10465441SEvalZero  * DNS_SERVER_ADDRESS(ipaddr), where 'ipaddr' is an 'ip_addr_t*'
1111*10465441SEvalZero  */
1112*10465441SEvalZero #if !defined DNS_MAX_SERVERS || defined __DOXYGEN__
1113*10465441SEvalZero #define DNS_MAX_SERVERS                 2
1114*10465441SEvalZero #endif
1115*10465441SEvalZero 
1116*10465441SEvalZero /** DNS maximum number of retries when asking for a name, before "timeout". */
1117*10465441SEvalZero #if !defined DNS_MAX_RETRIES || defined __DOXYGEN__
1118*10465441SEvalZero #define DNS_MAX_RETRIES                 4
1119*10465441SEvalZero #endif
1120*10465441SEvalZero 
1121*10465441SEvalZero /** DNS do a name checking between the query and the response. */
1122*10465441SEvalZero #if !defined DNS_DOES_NAME_CHECK || defined __DOXYGEN__
1123*10465441SEvalZero #define DNS_DOES_NAME_CHECK             1
1124*10465441SEvalZero #endif
1125*10465441SEvalZero 
1126*10465441SEvalZero /** LWIP_DNS_SECURE: controls the security level of the DNS implementation
1127*10465441SEvalZero  * Use all DNS security features by default.
1128*10465441SEvalZero  * This is overridable but should only be needed by very small targets
1129*10465441SEvalZero  * or when using against non standard DNS servers. */
1130*10465441SEvalZero #if !defined LWIP_DNS_SECURE || defined __DOXYGEN__
1131*10465441SEvalZero #define LWIP_DNS_SECURE (LWIP_DNS_SECURE_RAND_XID | LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING | LWIP_DNS_SECURE_RAND_SRC_PORT)
1132*10465441SEvalZero #endif
1133*10465441SEvalZero 
1134*10465441SEvalZero /* A list of DNS security features follows */
1135*10465441SEvalZero #define LWIP_DNS_SECURE_RAND_XID                1
1136*10465441SEvalZero #define LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING 2
1137*10465441SEvalZero #define LWIP_DNS_SECURE_RAND_SRC_PORT           4
1138*10465441SEvalZero 
1139*10465441SEvalZero /** DNS_LOCAL_HOSTLIST: Implements a local host-to-address list. If enabled, you have to define an initializer:
1140*10465441SEvalZero  *  \#define DNS_LOCAL_HOSTLIST_INIT {DNS_LOCAL_HOSTLIST_ELEM("host_ip4", IPADDR4_INIT_BYTES(1,2,3,4)), \
1141*10465441SEvalZero  *                                    DNS_LOCAL_HOSTLIST_ELEM("host_ip6", IPADDR6_INIT_HOST(123, 234, 345, 456)}
1142*10465441SEvalZero  *
1143*10465441SEvalZero  *  Instead, you can also use an external function:
1144*10465441SEvalZero  *  \#define DNS_LOOKUP_LOCAL_EXTERN(x) extern err_t my_lookup_function(const char *name, ip_addr_t *addr, u8_t dns_addrtype)
1145*10465441SEvalZero  *  that looks up the IP address and returns ERR_OK if found (LWIP_DNS_ADDRTYPE_xxx is passed in dns_addrtype).
1146*10465441SEvalZero  */
1147*10465441SEvalZero #if !defined DNS_LOCAL_HOSTLIST || defined __DOXYGEN__
1148*10465441SEvalZero #define DNS_LOCAL_HOSTLIST              0
1149*10465441SEvalZero #endif /* DNS_LOCAL_HOSTLIST */
1150*10465441SEvalZero 
1151*10465441SEvalZero /** If this is turned on, the local host-list can be dynamically changed
1152*10465441SEvalZero  *  at runtime. */
1153*10465441SEvalZero #if !defined DNS_LOCAL_HOSTLIST_IS_DYNAMIC || defined __DOXYGEN__
1154*10465441SEvalZero #define DNS_LOCAL_HOSTLIST_IS_DYNAMIC   0
1155*10465441SEvalZero #endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */
1156*10465441SEvalZero 
1157*10465441SEvalZero /** Set this to 1 to enable querying ".local" names via mDNS
1158*10465441SEvalZero  *  using a One-Shot Multicast DNS Query */
1159*10465441SEvalZero #if !defined LWIP_DNS_SUPPORT_MDNS_QUERIES || defined __DOXYGEN__
1160*10465441SEvalZero #define LWIP_DNS_SUPPORT_MDNS_QUERIES   0
1161*10465441SEvalZero #endif
1162*10465441SEvalZero /**
1163*10465441SEvalZero  * @}
1164*10465441SEvalZero  */
1165*10465441SEvalZero 
1166*10465441SEvalZero /*
1167*10465441SEvalZero    ---------------------------------
1168*10465441SEvalZero    ---------- UDP options ----------
1169*10465441SEvalZero    ---------------------------------
1170*10465441SEvalZero */
1171*10465441SEvalZero /**
1172*10465441SEvalZero  * @defgroup lwip_opts_udp UDP
1173*10465441SEvalZero  * @ingroup lwip_opts_callback
1174*10465441SEvalZero  * @{
1175*10465441SEvalZero  */
1176*10465441SEvalZero /**
1177*10465441SEvalZero  * LWIP_UDP==1: Turn on UDP.
1178*10465441SEvalZero  */
1179*10465441SEvalZero #if !defined LWIP_UDP || defined __DOXYGEN__
1180*10465441SEvalZero #define LWIP_UDP                        1
1181*10465441SEvalZero #endif
1182*10465441SEvalZero 
1183*10465441SEvalZero /**
1184*10465441SEvalZero  * LWIP_UDPLITE==1: Turn on UDP-Lite. (Requires LWIP_UDP)
1185*10465441SEvalZero  */
1186*10465441SEvalZero #if !defined LWIP_UDPLITE || defined __DOXYGEN__
1187*10465441SEvalZero #define LWIP_UDPLITE                    0
1188*10465441SEvalZero #endif
1189*10465441SEvalZero 
1190*10465441SEvalZero /**
1191*10465441SEvalZero  * UDP_TTL: Default Time-To-Live value.
1192*10465441SEvalZero  */
1193*10465441SEvalZero #if !defined UDP_TTL || defined __DOXYGEN__
1194*10465441SEvalZero #define UDP_TTL                         IP_DEFAULT_TTL
1195*10465441SEvalZero #endif
1196*10465441SEvalZero 
1197*10465441SEvalZero /**
1198*10465441SEvalZero  * LWIP_NETBUF_RECVINFO==1: append destination addr and port to every netbuf.
1199*10465441SEvalZero  */
1200*10465441SEvalZero #if !defined LWIP_NETBUF_RECVINFO || defined __DOXYGEN__
1201*10465441SEvalZero #define LWIP_NETBUF_RECVINFO            0
1202*10465441SEvalZero #endif
1203*10465441SEvalZero /**
1204*10465441SEvalZero  * @}
1205*10465441SEvalZero  */
1206*10465441SEvalZero 
1207*10465441SEvalZero /*
1208*10465441SEvalZero    ---------------------------------
1209*10465441SEvalZero    ---------- TCP options ----------
1210*10465441SEvalZero    ---------------------------------
1211*10465441SEvalZero */
1212*10465441SEvalZero /**
1213*10465441SEvalZero  * @defgroup lwip_opts_tcp TCP
1214*10465441SEvalZero  * @ingroup lwip_opts_callback
1215*10465441SEvalZero  * @{
1216*10465441SEvalZero  */
1217*10465441SEvalZero /**
1218*10465441SEvalZero  * LWIP_TCP==1: Turn on TCP.
1219*10465441SEvalZero  */
1220*10465441SEvalZero #if !defined LWIP_TCP || defined __DOXYGEN__
1221*10465441SEvalZero #define LWIP_TCP                        1
1222*10465441SEvalZero #endif
1223*10465441SEvalZero 
1224*10465441SEvalZero /**
1225*10465441SEvalZero  * TCP_TTL: Default Time-To-Live value.
1226*10465441SEvalZero  */
1227*10465441SEvalZero #if !defined TCP_TTL || defined __DOXYGEN__
1228*10465441SEvalZero #define TCP_TTL                         IP_DEFAULT_TTL
1229*10465441SEvalZero #endif
1230*10465441SEvalZero 
1231*10465441SEvalZero /**
1232*10465441SEvalZero  * TCP_WND: The size of a TCP window.  This must be at least
1233*10465441SEvalZero  * (2 * TCP_MSS) for things to work well.
1234*10465441SEvalZero  * ATTENTION: when using TCP_RCV_SCALE, TCP_WND is the total size
1235*10465441SEvalZero  * with scaling applied. Maximum window value in the TCP header
1236*10465441SEvalZero  * will be TCP_WND >> TCP_RCV_SCALE
1237*10465441SEvalZero  */
1238*10465441SEvalZero #if !defined TCP_WND || defined __DOXYGEN__
1239*10465441SEvalZero #define TCP_WND                         (4 * TCP_MSS)
1240*10465441SEvalZero #endif
1241*10465441SEvalZero 
1242*10465441SEvalZero /**
1243*10465441SEvalZero  * TCP_MAXRTX: Maximum number of retransmissions of data segments.
1244*10465441SEvalZero  */
1245*10465441SEvalZero #if !defined TCP_MAXRTX || defined __DOXYGEN__
1246*10465441SEvalZero #define TCP_MAXRTX                      12
1247*10465441SEvalZero #endif
1248*10465441SEvalZero 
1249*10465441SEvalZero /**
1250*10465441SEvalZero  * TCP_SYNMAXRTX: Maximum number of retransmissions of SYN segments.
1251*10465441SEvalZero  */
1252*10465441SEvalZero #if !defined TCP_SYNMAXRTX || defined __DOXYGEN__
1253*10465441SEvalZero #define TCP_SYNMAXRTX                   6
1254*10465441SEvalZero #endif
1255*10465441SEvalZero 
1256*10465441SEvalZero /**
1257*10465441SEvalZero  * TCP_QUEUE_OOSEQ==1: TCP will queue segments that arrive out of order.
1258*10465441SEvalZero  * Define to 0 if your device is low on memory.
1259*10465441SEvalZero  */
1260*10465441SEvalZero #if !defined TCP_QUEUE_OOSEQ || defined __DOXYGEN__
1261*10465441SEvalZero #define TCP_QUEUE_OOSEQ                 LWIP_TCP
1262*10465441SEvalZero #endif
1263*10465441SEvalZero 
1264*10465441SEvalZero /**
1265*10465441SEvalZero  * LWIP_TCP_SACK_OUT==1: TCP will support sending selective acknowledgements (SACKs).
1266*10465441SEvalZero  */
1267*10465441SEvalZero #if !defined LWIP_TCP_SACK_OUT || defined __DOXYGEN__
1268*10465441SEvalZero #define LWIP_TCP_SACK_OUT               0
1269*10465441SEvalZero #endif
1270*10465441SEvalZero 
1271*10465441SEvalZero /**
1272*10465441SEvalZero  * LWIP_TCP_MAX_SACK_NUM: The maximum number of SACK values to include in TCP segments.
1273*10465441SEvalZero  * Must be at least 1, but is only used if LWIP_TCP_SACK_OUT is enabled.
1274*10465441SEvalZero  * NOTE: Even though we never send more than 3 or 4 SACK ranges in a single segment
1275*10465441SEvalZero  * (depending on other options), setting this option to values greater than 4 is not pointless.
1276*10465441SEvalZero  * This is basically the max number of SACK ranges we want to keep track of.
1277*10465441SEvalZero  * As new data is delivered, some of the SACK ranges may be removed or merged.
1278*10465441SEvalZero  * In that case some of those older SACK ranges may be used again.
1279*10465441SEvalZero  * The amount of memory used to store SACK ranges is LWIP_TCP_MAX_SACK_NUM * 8 bytes for each TCP PCB.
1280*10465441SEvalZero  */
1281*10465441SEvalZero #if !defined LWIP_TCP_MAX_SACK_NUM || defined __DOXYGEN__
1282*10465441SEvalZero #define LWIP_TCP_MAX_SACK_NUM           4
1283*10465441SEvalZero #endif
1284*10465441SEvalZero 
1285*10465441SEvalZero /**
1286*10465441SEvalZero  * TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default,
1287*10465441SEvalZero  * you might want to increase this.)
1288*10465441SEvalZero  * For the receive side, this MSS is advertised to the remote side
1289*10465441SEvalZero  * when opening a connection. For the transmit size, this MSS sets
1290*10465441SEvalZero  * an upper limit on the MSS advertised by the remote host.
1291*10465441SEvalZero  */
1292*10465441SEvalZero #if !defined TCP_MSS || defined __DOXYGEN__
1293*10465441SEvalZero #define TCP_MSS                         536
1294*10465441SEvalZero #endif
1295*10465441SEvalZero 
1296*10465441SEvalZero /**
1297*10465441SEvalZero  * TCP_CALCULATE_EFF_SEND_MSS: "The maximum size of a segment that TCP really
1298*10465441SEvalZero  * sends, the 'effective send MSS,' MUST be the smaller of the send MSS (which
1299*10465441SEvalZero  * reflects the available reassembly buffer size at the remote host) and the
1300*10465441SEvalZero  * largest size permitted by the IP layer" (RFC 1122)
1301*10465441SEvalZero  * Setting this to 1 enables code that checks TCP_MSS against the MTU of the
1302*10465441SEvalZero  * netif used for a connection and limits the MSS if it would be too big otherwise.
1303*10465441SEvalZero  */
1304*10465441SEvalZero #if !defined TCP_CALCULATE_EFF_SEND_MSS || defined __DOXYGEN__
1305*10465441SEvalZero #define TCP_CALCULATE_EFF_SEND_MSS      1
1306*10465441SEvalZero #endif
1307*10465441SEvalZero 
1308*10465441SEvalZero 
1309*10465441SEvalZero /**
1310*10465441SEvalZero  * TCP_SND_BUF: TCP sender buffer space (bytes).
1311*10465441SEvalZero  * To achieve good performance, this should be at least 2 * TCP_MSS.
1312*10465441SEvalZero  */
1313*10465441SEvalZero #if !defined TCP_SND_BUF || defined __DOXYGEN__
1314*10465441SEvalZero #define TCP_SND_BUF                     (2 * TCP_MSS)
1315*10465441SEvalZero #endif
1316*10465441SEvalZero 
1317*10465441SEvalZero /**
1318*10465441SEvalZero  * TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least
1319*10465441SEvalZero  * as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work.
1320*10465441SEvalZero  */
1321*10465441SEvalZero #if !defined TCP_SND_QUEUELEN || defined __DOXYGEN__
1322*10465441SEvalZero #define TCP_SND_QUEUELEN                ((4 * (TCP_SND_BUF) + (TCP_MSS - 1))/(TCP_MSS))
1323*10465441SEvalZero #endif
1324*10465441SEvalZero 
1325*10465441SEvalZero /**
1326*10465441SEvalZero  * TCP_SNDLOWAT: TCP writable space (bytes). This must be less than
1327*10465441SEvalZero  * TCP_SND_BUF. It is the amount of space which must be available in the
1328*10465441SEvalZero  * TCP snd_buf for select to return writable (combined with TCP_SNDQUEUELOWAT).
1329*10465441SEvalZero  */
1330*10465441SEvalZero #if !defined TCP_SNDLOWAT || defined __DOXYGEN__
1331*10465441SEvalZero #define TCP_SNDLOWAT                    LWIP_MIN(LWIP_MAX(((TCP_SND_BUF)/2), (2 * TCP_MSS) + 1), (TCP_SND_BUF) - 1)
1332*10465441SEvalZero #endif
1333*10465441SEvalZero 
1334*10465441SEvalZero /**
1335*10465441SEvalZero  * TCP_SNDQUEUELOWAT: TCP writable bufs (pbuf count). This must be less
1336*10465441SEvalZero  * than TCP_SND_QUEUELEN. If the number of pbufs queued on a pcb drops below
1337*10465441SEvalZero  * this number, select returns writable (combined with TCP_SNDLOWAT).
1338*10465441SEvalZero  */
1339*10465441SEvalZero #if !defined TCP_SNDQUEUELOWAT || defined __DOXYGEN__
1340*10465441SEvalZero #define TCP_SNDQUEUELOWAT               LWIP_MAX(((TCP_SND_QUEUELEN)/2), 5)
1341*10465441SEvalZero #endif
1342*10465441SEvalZero 
1343*10465441SEvalZero /**
1344*10465441SEvalZero  * TCP_OOSEQ_MAX_BYTES: The default maximum number of bytes queued on ooseq per
1345*10465441SEvalZero  * pcb if TCP_OOSEQ_BYTES_LIMIT is not defined. Default is 0 (no limit).
1346*10465441SEvalZero  * Only valid for TCP_QUEUE_OOSEQ==1.
1347*10465441SEvalZero  */
1348*10465441SEvalZero #if !defined TCP_OOSEQ_MAX_BYTES || defined __DOXYGEN__
1349*10465441SEvalZero #define TCP_OOSEQ_MAX_BYTES             0
1350*10465441SEvalZero #endif
1351*10465441SEvalZero 
1352*10465441SEvalZero /**
1353*10465441SEvalZero  * TCP_OOSEQ_BYTES_LIMIT(pcb): Return the maximum number of bytes to be queued
1354*10465441SEvalZero  * on ooseq per pcb, given the pcb. Only valid for TCP_QUEUE_OOSEQ==1 &&
1355*10465441SEvalZero  * TCP_OOSEQ_MAX_BYTES==1.
1356*10465441SEvalZero  * Use this to override TCP_OOSEQ_MAX_BYTES to a dynamic value per pcb.
1357*10465441SEvalZero  */
1358*10465441SEvalZero #if !defined TCP_OOSEQ_BYTES_LIMIT
1359*10465441SEvalZero #if TCP_OOSEQ_MAX_BYTES
1360*10465441SEvalZero #define TCP_OOSEQ_BYTES_LIMIT(pcb)      TCP_OOSEQ_MAX_BYTES
1361*10465441SEvalZero #elif defined __DOXYGEN__
1362*10465441SEvalZero #define TCP_OOSEQ_BYTES_LIMIT(pcb)
1363*10465441SEvalZero #endif
1364*10465441SEvalZero #endif
1365*10465441SEvalZero 
1366*10465441SEvalZero /**
1367*10465441SEvalZero  * TCP_OOSEQ_MAX_PBUFS: The default maximum number of pbufs queued on ooseq per
1368*10465441SEvalZero  * pcb if TCP_OOSEQ_BYTES_LIMIT is not defined. Default is 0 (no limit).
1369*10465441SEvalZero  * Only valid for TCP_QUEUE_OOSEQ==1.
1370*10465441SEvalZero  */
1371*10465441SEvalZero #if !defined TCP_OOSEQ_MAX_PBUFS || defined __DOXYGEN__
1372*10465441SEvalZero #define TCP_OOSEQ_MAX_PBUFS             0
1373*10465441SEvalZero #endif
1374*10465441SEvalZero 
1375*10465441SEvalZero /**
1376*10465441SEvalZero  * TCP_OOSEQ_PBUFS_LIMIT(pcb): Return the maximum number of pbufs to be queued
1377*10465441SEvalZero  * on ooseq per pcb, given the pcb.  Only valid for TCP_QUEUE_OOSEQ==1 &&
1378*10465441SEvalZero  * TCP_OOSEQ_MAX_PBUFS==1.
1379*10465441SEvalZero  * Use this to override TCP_OOSEQ_MAX_PBUFS to a dynamic value per pcb.
1380*10465441SEvalZero  */
1381*10465441SEvalZero #if !defined TCP_OOSEQ_PBUFS_LIMIT
1382*10465441SEvalZero #if TCP_OOSEQ_MAX_PBUFS
1383*10465441SEvalZero #define TCP_OOSEQ_PBUFS_LIMIT(pcb)      TCP_OOSEQ_MAX_PBUFS
1384*10465441SEvalZero #elif defined __DOXYGEN__
1385*10465441SEvalZero #define TCP_OOSEQ_PBUFS_LIMIT(pcb)
1386*10465441SEvalZero #endif
1387*10465441SEvalZero #endif
1388*10465441SEvalZero 
1389*10465441SEvalZero /**
1390*10465441SEvalZero  * TCP_LISTEN_BACKLOG: Enable the backlog option for tcp listen pcb.
1391*10465441SEvalZero  */
1392*10465441SEvalZero #if !defined TCP_LISTEN_BACKLOG || defined __DOXYGEN__
1393*10465441SEvalZero #define TCP_LISTEN_BACKLOG              0
1394*10465441SEvalZero #endif
1395*10465441SEvalZero 
1396*10465441SEvalZero /**
1397*10465441SEvalZero  * The maximum allowed backlog for TCP listen netconns.
1398*10465441SEvalZero  * This backlog is used unless another is explicitly specified.
1399*10465441SEvalZero  * 0xff is the maximum (u8_t).
1400*10465441SEvalZero  */
1401*10465441SEvalZero #if !defined TCP_DEFAULT_LISTEN_BACKLOG || defined __DOXYGEN__
1402*10465441SEvalZero #define TCP_DEFAULT_LISTEN_BACKLOG      0xff
1403*10465441SEvalZero #endif
1404*10465441SEvalZero 
1405*10465441SEvalZero /**
1406*10465441SEvalZero  * TCP_OVERSIZE: The maximum number of bytes that tcp_write may
1407*10465441SEvalZero  * allocate ahead of time in an attempt to create shorter pbuf chains
1408*10465441SEvalZero  * for transmission. The meaningful range is 0 to TCP_MSS. Some
1409*10465441SEvalZero  * suggested values are:
1410*10465441SEvalZero  *
1411*10465441SEvalZero  * 0:         Disable oversized allocation. Each tcp_write() allocates a new
1412*10465441SEvalZero               pbuf (old behaviour).
1413*10465441SEvalZero  * 1:         Allocate size-aligned pbufs with minimal excess. Use this if your
1414*10465441SEvalZero  *            scatter-gather DMA requires aligned fragments.
1415*10465441SEvalZero  * 128:       Limit the pbuf/memory overhead to 20%.
1416*10465441SEvalZero  * TCP_MSS:   Try to create unfragmented TCP packets.
1417*10465441SEvalZero  * TCP_MSS/4: Try to create 4 fragments or less per TCP packet.
1418*10465441SEvalZero  */
1419*10465441SEvalZero #if !defined TCP_OVERSIZE || defined __DOXYGEN__
1420*10465441SEvalZero #define TCP_OVERSIZE                    TCP_MSS
1421*10465441SEvalZero #endif
1422*10465441SEvalZero 
1423*10465441SEvalZero /**
1424*10465441SEvalZero  * LWIP_TCP_TIMESTAMPS==1: support the TCP timestamp option.
1425*10465441SEvalZero  * The timestamp option is currently only used to help remote hosts, it is not
1426*10465441SEvalZero  * really used locally. Therefore, it is only enabled when a TS option is
1427*10465441SEvalZero  * received in the initial SYN packet from a remote host.
1428*10465441SEvalZero  */
1429*10465441SEvalZero #if !defined LWIP_TCP_TIMESTAMPS || defined __DOXYGEN__
1430*10465441SEvalZero #define LWIP_TCP_TIMESTAMPS             0
1431*10465441SEvalZero #endif
1432*10465441SEvalZero 
1433*10465441SEvalZero /**
1434*10465441SEvalZero  * TCP_WND_UPDATE_THRESHOLD: difference in window to trigger an
1435*10465441SEvalZero  * explicit window update
1436*10465441SEvalZero  */
1437*10465441SEvalZero #if !defined TCP_WND_UPDATE_THRESHOLD || defined __DOXYGEN__
1438*10465441SEvalZero #define TCP_WND_UPDATE_THRESHOLD        LWIP_MIN((TCP_WND / 4), (TCP_MSS * 4))
1439*10465441SEvalZero #endif
1440*10465441SEvalZero 
1441*10465441SEvalZero /**
1442*10465441SEvalZero  * LWIP_EVENT_API and LWIP_CALLBACK_API: Only one of these should be set to 1.
1443*10465441SEvalZero  *     LWIP_EVENT_API==1: The user defines lwip_tcp_event() to receive all
1444*10465441SEvalZero  *         events (accept, sent, etc) that happen in the system.
1445*10465441SEvalZero  *     LWIP_CALLBACK_API==1: The PCB callback function is called directly
1446*10465441SEvalZero  *         for the event. This is the default.
1447*10465441SEvalZero  */
1448*10465441SEvalZero #if !defined(LWIP_EVENT_API) && !defined(LWIP_CALLBACK_API) || defined __DOXYGEN__
1449*10465441SEvalZero #define LWIP_EVENT_API                  0
1450*10465441SEvalZero #define LWIP_CALLBACK_API               1
1451*10465441SEvalZero #else
1452*10465441SEvalZero #ifndef LWIP_EVENT_API
1453*10465441SEvalZero #define LWIP_EVENT_API                  0
1454*10465441SEvalZero #endif
1455*10465441SEvalZero #ifndef LWIP_CALLBACK_API
1456*10465441SEvalZero #define LWIP_CALLBACK_API               0
1457*10465441SEvalZero #endif
1458*10465441SEvalZero #endif
1459*10465441SEvalZero 
1460*10465441SEvalZero /**
1461*10465441SEvalZero  * LWIP_WND_SCALE and TCP_RCV_SCALE:
1462*10465441SEvalZero  * Set LWIP_WND_SCALE to 1 to enable window scaling.
1463*10465441SEvalZero  * Set TCP_RCV_SCALE to the desired scaling factor (shift count in the
1464*10465441SEvalZero  * range of [0..14]).
1465*10465441SEvalZero  * When LWIP_WND_SCALE is enabled but TCP_RCV_SCALE is 0, we can use a large
1466*10465441SEvalZero  * send window while having a small receive window only.
1467*10465441SEvalZero  */
1468*10465441SEvalZero #if !defined LWIP_WND_SCALE || defined __DOXYGEN__
1469*10465441SEvalZero #define LWIP_WND_SCALE                  0
1470*10465441SEvalZero #define TCP_RCV_SCALE                   0
1471*10465441SEvalZero #endif
1472*10465441SEvalZero 
1473*10465441SEvalZero /**
1474*10465441SEvalZero  * LWIP_TCP_PCB_NUM_EXT_ARGS:
1475*10465441SEvalZero  * When this is > 0, every tcp pcb (including listen pcb) includes a number of
1476*10465441SEvalZero  * additional argument entries in an array (see tcp_ext_arg_alloc_id)
1477*10465441SEvalZero  */
1478*10465441SEvalZero #if !defined LWIP_TCP_PCB_NUM_EXT_ARGS || defined __DOXYGEN__
1479*10465441SEvalZero #define LWIP_TCP_PCB_NUM_EXT_ARGS       0
1480*10465441SEvalZero #endif
1481*10465441SEvalZero 
1482*10465441SEvalZero /** LWIP_ALTCP==1: enable the altcp API.
1483*10465441SEvalZero  * altcp is an abstraction layer that prevents applications linking against the
1484*10465441SEvalZero  * tcp.h functions but provides the same functionality. It is used to e.g. add
1485*10465441SEvalZero  * SSL/TLS or proxy-connect support to an application written for the tcp callback
1486*10465441SEvalZero  * API without that application knowing the protocol details.
1487*10465441SEvalZero  *
1488*10465441SEvalZero  * With LWIP_ALTCP==0, applications written against the altcp API can still be
1489*10465441SEvalZero  * compiled but are directly linked against the tcp.h callback API and then
1490*10465441SEvalZero  * cannot use layered protocols.
1491*10465441SEvalZero  *
1492*10465441SEvalZero  * See @ref altcp_api
1493*10465441SEvalZero  */
1494*10465441SEvalZero #if !defined LWIP_ALTCP || defined __DOXYGEN__
1495*10465441SEvalZero #define LWIP_ALTCP                      0
1496*10465441SEvalZero #endif
1497*10465441SEvalZero 
1498*10465441SEvalZero /** LWIP_ALTCP_TLS==1: enable TLS support for altcp API.
1499*10465441SEvalZero  * This needs a port of the functions in altcp_tls.h to a TLS library.
1500*10465441SEvalZero  * A port to ARM mbedtls is provided with lwIP, see apps/altcp_tls/ directory
1501*10465441SEvalZero  * and LWIP_ALTCP_TLS_MBEDTLS option.
1502*10465441SEvalZero  */
1503*10465441SEvalZero #if !defined LWIP_ALTCP_TLS || defined __DOXYGEN__
1504*10465441SEvalZero #define LWIP_ALTCP_TLS                  0
1505*10465441SEvalZero #endif
1506*10465441SEvalZero 
1507*10465441SEvalZero /**
1508*10465441SEvalZero  * @}
1509*10465441SEvalZero  */
1510*10465441SEvalZero 
1511*10465441SEvalZero /*
1512*10465441SEvalZero    ----------------------------------
1513*10465441SEvalZero    ---------- Pbuf options ----------
1514*10465441SEvalZero    ----------------------------------
1515*10465441SEvalZero */
1516*10465441SEvalZero /**
1517*10465441SEvalZero  * @defgroup lwip_opts_pbuf PBUF
1518*10465441SEvalZero  * @ingroup lwip_opts
1519*10465441SEvalZero  * @{
1520*10465441SEvalZero  */
1521*10465441SEvalZero /**
1522*10465441SEvalZero  * PBUF_LINK_HLEN: the number of bytes that should be allocated for a
1523*10465441SEvalZero  * link level header. The default is 14, the standard value for
1524*10465441SEvalZero  * Ethernet.
1525*10465441SEvalZero  */
1526*10465441SEvalZero #if !defined PBUF_LINK_HLEN || defined __DOXYGEN__
1527*10465441SEvalZero #if defined LWIP_HOOK_VLAN_SET && !defined __DOXYGEN__
1528*10465441SEvalZero #define PBUF_LINK_HLEN                  (18 + ETH_PAD_SIZE)
1529*10465441SEvalZero #else /* LWIP_HOOK_VLAN_SET */
1530*10465441SEvalZero #define PBUF_LINK_HLEN                  (14 + ETH_PAD_SIZE)
1531*10465441SEvalZero #endif /* LWIP_HOOK_VLAN_SET */
1532*10465441SEvalZero #endif
1533*10465441SEvalZero 
1534*10465441SEvalZero /**
1535*10465441SEvalZero  * PBUF_LINK_ENCAPSULATION_HLEN: the number of bytes that should be allocated
1536*10465441SEvalZero  * for an additional encapsulation header before ethernet headers (e.g. 802.11)
1537*10465441SEvalZero  */
1538*10465441SEvalZero #if !defined PBUF_LINK_ENCAPSULATION_HLEN || defined __DOXYGEN__
1539*10465441SEvalZero #define PBUF_LINK_ENCAPSULATION_HLEN    0
1540*10465441SEvalZero #endif
1541*10465441SEvalZero 
1542*10465441SEvalZero /**
1543*10465441SEvalZero  * PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is
1544*10465441SEvalZero  * designed to accommodate single full size TCP frame in one pbuf, including
1545*10465441SEvalZero  * TCP_MSS, IP header, and link header.
1546*10465441SEvalZero  */
1547*10465441SEvalZero #if !defined PBUF_POOL_BUFSIZE || defined __DOXYGEN__
1548*10465441SEvalZero #define PBUF_POOL_BUFSIZE               LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_ENCAPSULATION_HLEN+PBUF_LINK_HLEN)
1549*10465441SEvalZero #endif
1550*10465441SEvalZero 
1551*10465441SEvalZero /**
1552*10465441SEvalZero  * LWIP_PBUF_REF_T: Refcount type in pbuf.
1553*10465441SEvalZero  * Default width of u8_t can be increased if 255 refs are not enough for you.
1554*10465441SEvalZero  */
1555*10465441SEvalZero #if !defined LWIP_PBUF_REF_T || defined __DOXYGEN__
1556*10465441SEvalZero #define LWIP_PBUF_REF_T                 u8_t
1557*10465441SEvalZero #endif
1558*10465441SEvalZero /**
1559*10465441SEvalZero  * @}
1560*10465441SEvalZero  */
1561*10465441SEvalZero 
1562*10465441SEvalZero /*
1563*10465441SEvalZero    ------------------------------------------------
1564*10465441SEvalZero    ---------- Network Interfaces options ----------
1565*10465441SEvalZero    ------------------------------------------------
1566*10465441SEvalZero */
1567*10465441SEvalZero /**
1568*10465441SEvalZero  * @defgroup lwip_opts_netif NETIF
1569*10465441SEvalZero  * @ingroup lwip_opts
1570*10465441SEvalZero  * @{
1571*10465441SEvalZero  */
1572*10465441SEvalZero /**
1573*10465441SEvalZero  * LWIP_SINGLE_NETIF==1: use a single netif only. This is the common case for
1574*10465441SEvalZero  * small real-life targets. Some code like routing etc. can be left out.
1575*10465441SEvalZero  */
1576*10465441SEvalZero #if !defined LWIP_SINGLE_NETIF || defined __DOXYGEN__
1577*10465441SEvalZero #define LWIP_SINGLE_NETIF               0
1578*10465441SEvalZero #endif
1579*10465441SEvalZero 
1580*10465441SEvalZero /**
1581*10465441SEvalZero  * LWIP_NETIF_HOSTNAME==1: use DHCP_OPTION_HOSTNAME with netif's hostname
1582*10465441SEvalZero  * field.
1583*10465441SEvalZero  */
1584*10465441SEvalZero #if !defined LWIP_NETIF_HOSTNAME || defined __DOXYGEN__
1585*10465441SEvalZero #define LWIP_NETIF_HOSTNAME             0
1586*10465441SEvalZero #endif
1587*10465441SEvalZero 
1588*10465441SEvalZero /**
1589*10465441SEvalZero  * LWIP_NETIF_API==1: Support netif api (in netifapi.c)
1590*10465441SEvalZero  */
1591*10465441SEvalZero #if !defined LWIP_NETIF_API || defined __DOXYGEN__
1592*10465441SEvalZero #define LWIP_NETIF_API                  0
1593*10465441SEvalZero #endif
1594*10465441SEvalZero 
1595*10465441SEvalZero /**
1596*10465441SEvalZero  * LWIP_NETIF_STATUS_CALLBACK==1: Support a callback function whenever an interface
1597*10465441SEvalZero  * changes its up/down status (i.e., due to DHCP IP acquisition)
1598*10465441SEvalZero  */
1599*10465441SEvalZero #if !defined LWIP_NETIF_STATUS_CALLBACK || defined __DOXYGEN__
1600*10465441SEvalZero #define LWIP_NETIF_STATUS_CALLBACK      0
1601*10465441SEvalZero #endif
1602*10465441SEvalZero 
1603*10465441SEvalZero /**
1604*10465441SEvalZero  * LWIP_NETIF_EXT_STATUS_CALLBACK==1: Support an extended callback function
1605*10465441SEvalZero  * for several netif related event that supports multiple subscribers.
1606*10465441SEvalZero  * @see netif_ext_status_callback
1607*10465441SEvalZero  */
1608*10465441SEvalZero #if !defined LWIP_NETIF_EXT_STATUS_CALLBACK || defined __DOXYGEN__
1609*10465441SEvalZero #define LWIP_NETIF_EXT_STATUS_CALLBACK  0
1610*10465441SEvalZero #endif
1611*10465441SEvalZero 
1612*10465441SEvalZero /**
1613*10465441SEvalZero  * LWIP_NETIF_LINK_CALLBACK==1: Support a callback function from an interface
1614*10465441SEvalZero  * whenever the link changes (i.e., link down)
1615*10465441SEvalZero  */
1616*10465441SEvalZero #if !defined LWIP_NETIF_LINK_CALLBACK || defined __DOXYGEN__
1617*10465441SEvalZero #define LWIP_NETIF_LINK_CALLBACK        0
1618*10465441SEvalZero #endif
1619*10465441SEvalZero 
1620*10465441SEvalZero /**
1621*10465441SEvalZero  * LWIP_NETIF_REMOVE_CALLBACK==1: Support a callback function that is called
1622*10465441SEvalZero  * when a netif has been removed
1623*10465441SEvalZero  */
1624*10465441SEvalZero #if !defined LWIP_NETIF_REMOVE_CALLBACK || defined __DOXYGEN__
1625*10465441SEvalZero #define LWIP_NETIF_REMOVE_CALLBACK      0
1626*10465441SEvalZero #endif
1627*10465441SEvalZero 
1628*10465441SEvalZero /**
1629*10465441SEvalZero  * LWIP_NETIF_HWADDRHINT==1: Cache link-layer-address hints (e.g. table
1630*10465441SEvalZero  * indices) in struct netif. TCP and UDP can make use of this to prevent
1631*10465441SEvalZero  * scanning the ARP table for every sent packet. While this is faster for big
1632*10465441SEvalZero  * ARP tables or many concurrent connections, it might be counterproductive
1633*10465441SEvalZero  * if you have a tiny ARP table or if there never are concurrent connections.
1634*10465441SEvalZero  */
1635*10465441SEvalZero #if !defined LWIP_NETIF_HWADDRHINT || defined __DOXYGEN__
1636*10465441SEvalZero #define LWIP_NETIF_HWADDRHINT           0
1637*10465441SEvalZero #endif
1638*10465441SEvalZero 
1639*10465441SEvalZero /**
1640*10465441SEvalZero  * LWIP_NETIF_TX_SINGLE_PBUF: if this is set to 1, lwIP *tries* to put all data
1641*10465441SEvalZero  * to be sent into one single pbuf. This is for compatibility with DMA-enabled
1642*10465441SEvalZero  * MACs that do not support scatter-gather.
1643*10465441SEvalZero  * Beware that this might involve CPU-memcpy before transmitting that would not
1644*10465441SEvalZero  * be needed without this flag! Use this only if you need to!
1645*10465441SEvalZero  *
1646*10465441SEvalZero  * ATTENTION: a driver should *NOT* rely on getting single pbufs but check TX
1647*10465441SEvalZero  * pbufs for being in one piece. If not, @ref pbuf_clone can be used to get
1648*10465441SEvalZero  * a single pbuf:
1649*10465441SEvalZero  *   if (p->next != NULL) {
1650*10465441SEvalZero  *     struct pbuf *q = pbuf_clone(PBUF_RAW, PBUF_RAM, p);
1651*10465441SEvalZero  *     if (q == NULL) {
1652*10465441SEvalZero  *       return ERR_MEM;
1653*10465441SEvalZero  *     }
1654*10465441SEvalZero  *     p = q; ATTENTION: do NOT free the old 'p' as the ref belongs to the caller!
1655*10465441SEvalZero  *   }
1656*10465441SEvalZero  */
1657*10465441SEvalZero #if !defined LWIP_NETIF_TX_SINGLE_PBUF || defined __DOXYGEN__
1658*10465441SEvalZero #define LWIP_NETIF_TX_SINGLE_PBUF       0
1659*10465441SEvalZero #endif /* LWIP_NETIF_TX_SINGLE_PBUF */
1660*10465441SEvalZero 
1661*10465441SEvalZero /**
1662*10465441SEvalZero  * LWIP_NUM_NETIF_CLIENT_DATA: Number of clients that may store
1663*10465441SEvalZero  * data in client_data member array of struct netif (max. 256).
1664*10465441SEvalZero  */
1665*10465441SEvalZero #if !defined LWIP_NUM_NETIF_CLIENT_DATA || defined __DOXYGEN__
1666*10465441SEvalZero #define LWIP_NUM_NETIF_CLIENT_DATA      0
1667*10465441SEvalZero #endif
1668*10465441SEvalZero /**
1669*10465441SEvalZero  * @}
1670*10465441SEvalZero  */
1671*10465441SEvalZero 
1672*10465441SEvalZero /*
1673*10465441SEvalZero    ------------------------------------
1674*10465441SEvalZero    ---------- LOOPIF options ----------
1675*10465441SEvalZero    ------------------------------------
1676*10465441SEvalZero */
1677*10465441SEvalZero /**
1678*10465441SEvalZero  * @defgroup lwip_opts_loop Loopback interface
1679*10465441SEvalZero  * @ingroup lwip_opts_netif
1680*10465441SEvalZero  * @{
1681*10465441SEvalZero  */
1682*10465441SEvalZero /**
1683*10465441SEvalZero  * LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1).
1684*10465441SEvalZero  * This is only needed when no real netifs are available. If at least one other
1685*10465441SEvalZero  * netif is available, loopback traffic uses this netif.
1686*10465441SEvalZero  */
1687*10465441SEvalZero #if !defined LWIP_HAVE_LOOPIF || defined __DOXYGEN__
1688*10465441SEvalZero #define LWIP_HAVE_LOOPIF                (LWIP_NETIF_LOOPBACK && !LWIP_SINGLE_NETIF)
1689*10465441SEvalZero #endif
1690*10465441SEvalZero 
1691*10465441SEvalZero /**
1692*10465441SEvalZero  * LWIP_LOOPIF_MULTICAST==1: Support multicast/IGMP on loop interface (127.0.0.1).
1693*10465441SEvalZero  */
1694*10465441SEvalZero #if !defined LWIP_LOOPIF_MULTICAST || defined __DOXYGEN__
1695*10465441SEvalZero #define LWIP_LOOPIF_MULTICAST           0
1696*10465441SEvalZero #endif
1697*10465441SEvalZero 
1698*10465441SEvalZero /**
1699*10465441SEvalZero  * LWIP_NETIF_LOOPBACK==1: Support sending packets with a destination IP
1700*10465441SEvalZero  * address equal to the netif IP address, looping them back up the stack.
1701*10465441SEvalZero  */
1702*10465441SEvalZero #if !defined LWIP_NETIF_LOOPBACK || defined __DOXYGEN__
1703*10465441SEvalZero #define LWIP_NETIF_LOOPBACK             0
1704*10465441SEvalZero #endif
1705*10465441SEvalZero 
1706*10465441SEvalZero /**
1707*10465441SEvalZero  * LWIP_LOOPBACK_MAX_PBUFS: Maximum number of pbufs on queue for loopback
1708*10465441SEvalZero  * sending for each netif (0 = disabled)
1709*10465441SEvalZero  */
1710*10465441SEvalZero #if !defined LWIP_LOOPBACK_MAX_PBUFS || defined __DOXYGEN__
1711*10465441SEvalZero #define LWIP_LOOPBACK_MAX_PBUFS         0
1712*10465441SEvalZero #endif
1713*10465441SEvalZero 
1714*10465441SEvalZero /**
1715*10465441SEvalZero  * LWIP_NETIF_LOOPBACK_MULTITHREADING: Indicates whether threading is enabled in
1716*10465441SEvalZero  * the system, as netifs must change how they behave depending on this setting
1717*10465441SEvalZero  * for the LWIP_NETIF_LOOPBACK option to work.
1718*10465441SEvalZero  * Setting this is needed to avoid reentering non-reentrant functions like
1719*10465441SEvalZero  * tcp_input().
1720*10465441SEvalZero  *    LWIP_NETIF_LOOPBACK_MULTITHREADING==1: Indicates that the user is using a
1721*10465441SEvalZero  *       multithreaded environment like tcpip.c. In this case, netif->input()
1722*10465441SEvalZero  *       is called directly.
1723*10465441SEvalZero  *    LWIP_NETIF_LOOPBACK_MULTITHREADING==0: Indicates a polling (or NO_SYS) setup.
1724*10465441SEvalZero  *       The packets are put on a list and netif_poll() must be called in
1725*10465441SEvalZero  *       the main application loop.
1726*10465441SEvalZero  */
1727*10465441SEvalZero #if !defined LWIP_NETIF_LOOPBACK_MULTITHREADING || defined __DOXYGEN__
1728*10465441SEvalZero #define LWIP_NETIF_LOOPBACK_MULTITHREADING    (!NO_SYS)
1729*10465441SEvalZero #endif
1730*10465441SEvalZero /**
1731*10465441SEvalZero  * @}
1732*10465441SEvalZero  */
1733*10465441SEvalZero 
1734*10465441SEvalZero /*
1735*10465441SEvalZero    ------------------------------------
1736*10465441SEvalZero    ---------- Thread options ----------
1737*10465441SEvalZero    ------------------------------------
1738*10465441SEvalZero */
1739*10465441SEvalZero /**
1740*10465441SEvalZero  * @defgroup lwip_opts_thread Threading
1741*10465441SEvalZero  * @ingroup lwip_opts_infrastructure
1742*10465441SEvalZero  * @{
1743*10465441SEvalZero  */
1744*10465441SEvalZero /**
1745*10465441SEvalZero  * TCPIP_THREAD_NAME: The name assigned to the main tcpip thread.
1746*10465441SEvalZero  */
1747*10465441SEvalZero #if !defined TCPIP_THREAD_NAME || defined __DOXYGEN__
1748*10465441SEvalZero #define TCPIP_THREAD_NAME               "tcpip_thread"
1749*10465441SEvalZero #endif
1750*10465441SEvalZero 
1751*10465441SEvalZero /**
1752*10465441SEvalZero  * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread.
1753*10465441SEvalZero  * The stack size value itself is platform-dependent, but is passed to
1754*10465441SEvalZero  * sys_thread_new() when the thread is created.
1755*10465441SEvalZero  */
1756*10465441SEvalZero #if !defined TCPIP_THREAD_STACKSIZE || defined __DOXYGEN__
1757*10465441SEvalZero #define TCPIP_THREAD_STACKSIZE          0
1758*10465441SEvalZero #endif
1759*10465441SEvalZero 
1760*10465441SEvalZero /**
1761*10465441SEvalZero  * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread.
1762*10465441SEvalZero  * The priority value itself is platform-dependent, but is passed to
1763*10465441SEvalZero  * sys_thread_new() when the thread is created.
1764*10465441SEvalZero  */
1765*10465441SEvalZero #if !defined TCPIP_THREAD_PRIO || defined __DOXYGEN__
1766*10465441SEvalZero #define TCPIP_THREAD_PRIO               1
1767*10465441SEvalZero #endif
1768*10465441SEvalZero 
1769*10465441SEvalZero /**
1770*10465441SEvalZero  * TCPIP_MBOX_SIZE: The mailbox size for the tcpip thread messages
1771*10465441SEvalZero  * The queue size value itself is platform-dependent, but is passed to
1772*10465441SEvalZero  * sys_mbox_new() when tcpip_init is called.
1773*10465441SEvalZero  */
1774*10465441SEvalZero #if !defined TCPIP_MBOX_SIZE || defined __DOXYGEN__
1775*10465441SEvalZero #define TCPIP_MBOX_SIZE                 0
1776*10465441SEvalZero #endif
1777*10465441SEvalZero 
1778*10465441SEvalZero /**
1779*10465441SEvalZero  * Define this to something that triggers a watchdog. This is called from
1780*10465441SEvalZero  * tcpip_thread after processing a message.
1781*10465441SEvalZero  */
1782*10465441SEvalZero #if !defined LWIP_TCPIP_THREAD_ALIVE || defined __DOXYGEN__
1783*10465441SEvalZero #define LWIP_TCPIP_THREAD_ALIVE()
1784*10465441SEvalZero #endif
1785*10465441SEvalZero 
1786*10465441SEvalZero /**
1787*10465441SEvalZero  * SLIPIF_THREAD_NAME: The name assigned to the slipif_loop thread.
1788*10465441SEvalZero  */
1789*10465441SEvalZero #if !defined SLIPIF_THREAD_NAME || defined __DOXYGEN__
1790*10465441SEvalZero #define SLIPIF_THREAD_NAME              "slipif_loop"
1791*10465441SEvalZero #endif
1792*10465441SEvalZero 
1793*10465441SEvalZero /**
1794*10465441SEvalZero  * SLIP_THREAD_STACKSIZE: The stack size used by the slipif_loop thread.
1795*10465441SEvalZero  * The stack size value itself is platform-dependent, but is passed to
1796*10465441SEvalZero  * sys_thread_new() when the thread is created.
1797*10465441SEvalZero  */
1798*10465441SEvalZero #if !defined SLIPIF_THREAD_STACKSIZE || defined __DOXYGEN__
1799*10465441SEvalZero #define SLIPIF_THREAD_STACKSIZE         0
1800*10465441SEvalZero #endif
1801*10465441SEvalZero 
1802*10465441SEvalZero /**
1803*10465441SEvalZero  * SLIPIF_THREAD_PRIO: The priority assigned to the slipif_loop thread.
1804*10465441SEvalZero  * The priority value itself is platform-dependent, but is passed to
1805*10465441SEvalZero  * sys_thread_new() when the thread is created.
1806*10465441SEvalZero  */
1807*10465441SEvalZero #if !defined SLIPIF_THREAD_PRIO || defined __DOXYGEN__
1808*10465441SEvalZero #define SLIPIF_THREAD_PRIO              1
1809*10465441SEvalZero #endif
1810*10465441SEvalZero 
1811*10465441SEvalZero /**
1812*10465441SEvalZero  * DEFAULT_THREAD_NAME: The name assigned to any other lwIP thread.
1813*10465441SEvalZero  */
1814*10465441SEvalZero #if !defined DEFAULT_THREAD_NAME || defined __DOXYGEN__
1815*10465441SEvalZero #define DEFAULT_THREAD_NAME             "lwIP"
1816*10465441SEvalZero #endif
1817*10465441SEvalZero 
1818*10465441SEvalZero /**
1819*10465441SEvalZero  * DEFAULT_THREAD_STACKSIZE: The stack size used by any other lwIP thread.
1820*10465441SEvalZero  * The stack size value itself is platform-dependent, but is passed to
1821*10465441SEvalZero  * sys_thread_new() when the thread is created.
1822*10465441SEvalZero  */
1823*10465441SEvalZero #if !defined DEFAULT_THREAD_STACKSIZE || defined __DOXYGEN__
1824*10465441SEvalZero #define DEFAULT_THREAD_STACKSIZE        0
1825*10465441SEvalZero #endif
1826*10465441SEvalZero 
1827*10465441SEvalZero /**
1828*10465441SEvalZero  * DEFAULT_THREAD_PRIO: The priority assigned to any other lwIP thread.
1829*10465441SEvalZero  * The priority value itself is platform-dependent, but is passed to
1830*10465441SEvalZero  * sys_thread_new() when the thread is created.
1831*10465441SEvalZero  */
1832*10465441SEvalZero #if !defined DEFAULT_THREAD_PRIO || defined __DOXYGEN__
1833*10465441SEvalZero #define DEFAULT_THREAD_PRIO             1
1834*10465441SEvalZero #endif
1835*10465441SEvalZero 
1836*10465441SEvalZero /**
1837*10465441SEvalZero  * DEFAULT_RAW_RECVMBOX_SIZE: The mailbox size for the incoming packets on a
1838*10465441SEvalZero  * NETCONN_RAW. The queue size value itself is platform-dependent, but is passed
1839*10465441SEvalZero  * to sys_mbox_new() when the recvmbox is created.
1840*10465441SEvalZero  */
1841*10465441SEvalZero #if !defined DEFAULT_RAW_RECVMBOX_SIZE || defined __DOXYGEN__
1842*10465441SEvalZero #define DEFAULT_RAW_RECVMBOX_SIZE       0
1843*10465441SEvalZero #endif
1844*10465441SEvalZero 
1845*10465441SEvalZero /**
1846*10465441SEvalZero  * DEFAULT_UDP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a
1847*10465441SEvalZero  * NETCONN_UDP. The queue size value itself is platform-dependent, but is passed
1848*10465441SEvalZero  * to sys_mbox_new() when the recvmbox is created.
1849*10465441SEvalZero  */
1850*10465441SEvalZero #if !defined DEFAULT_UDP_RECVMBOX_SIZE || defined __DOXYGEN__
1851*10465441SEvalZero #define DEFAULT_UDP_RECVMBOX_SIZE       0
1852*10465441SEvalZero #endif
1853*10465441SEvalZero 
1854*10465441SEvalZero /**
1855*10465441SEvalZero  * DEFAULT_TCP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a
1856*10465441SEvalZero  * NETCONN_TCP. The queue size value itself is platform-dependent, but is passed
1857*10465441SEvalZero  * to sys_mbox_new() when the recvmbox is created.
1858*10465441SEvalZero  */
1859*10465441SEvalZero #if !defined DEFAULT_TCP_RECVMBOX_SIZE || defined __DOXYGEN__
1860*10465441SEvalZero #define DEFAULT_TCP_RECVMBOX_SIZE       0
1861*10465441SEvalZero #endif
1862*10465441SEvalZero 
1863*10465441SEvalZero /**
1864*10465441SEvalZero  * DEFAULT_ACCEPTMBOX_SIZE: The mailbox size for the incoming connections.
1865*10465441SEvalZero  * The queue size value itself is platform-dependent, but is passed to
1866*10465441SEvalZero  * sys_mbox_new() when the acceptmbox is created.
1867*10465441SEvalZero  */
1868*10465441SEvalZero #if !defined DEFAULT_ACCEPTMBOX_SIZE || defined __DOXYGEN__
1869*10465441SEvalZero #define DEFAULT_ACCEPTMBOX_SIZE         0
1870*10465441SEvalZero #endif
1871*10465441SEvalZero /**
1872*10465441SEvalZero  * @}
1873*10465441SEvalZero  */
1874*10465441SEvalZero 
1875*10465441SEvalZero /*
1876*10465441SEvalZero    ----------------------------------------------
1877*10465441SEvalZero    ---------- Sequential layer options ----------
1878*10465441SEvalZero    ----------------------------------------------
1879*10465441SEvalZero */
1880*10465441SEvalZero /**
1881*10465441SEvalZero  * @defgroup lwip_opts_netconn Netconn
1882*10465441SEvalZero  * @ingroup lwip_opts_threadsafe_apis
1883*10465441SEvalZero  * @{
1884*10465441SEvalZero  */
1885*10465441SEvalZero /**
1886*10465441SEvalZero  * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c)
1887*10465441SEvalZero  */
1888*10465441SEvalZero #if !defined LWIP_NETCONN || defined __DOXYGEN__
1889*10465441SEvalZero #define LWIP_NETCONN                    1
1890*10465441SEvalZero #endif
1891*10465441SEvalZero 
1892*10465441SEvalZero /** LWIP_TCPIP_TIMEOUT==1: Enable tcpip_timeout/tcpip_untimeout to create
1893*10465441SEvalZero  * timers running in tcpip_thread from another thread.
1894*10465441SEvalZero  */
1895*10465441SEvalZero #if !defined LWIP_TCPIP_TIMEOUT || defined __DOXYGEN__
1896*10465441SEvalZero #define LWIP_TCPIP_TIMEOUT              0
1897*10465441SEvalZero #endif
1898*10465441SEvalZero 
1899*10465441SEvalZero /** LWIP_NETCONN_SEM_PER_THREAD==1: Use one (thread-local) semaphore per
1900*10465441SEvalZero  * thread calling socket/netconn functions instead of allocating one
1901*10465441SEvalZero  * semaphore per netconn (and per select etc.)
1902*10465441SEvalZero  * ATTENTION: a thread-local semaphore for API calls is needed:
1903*10465441SEvalZero  * - LWIP_NETCONN_THREAD_SEM_GET() returning a sys_sem_t*
1904*10465441SEvalZero  * - LWIP_NETCONN_THREAD_SEM_ALLOC() creating the semaphore
1905*10465441SEvalZero  * - LWIP_NETCONN_THREAD_SEM_FREE() freeing the semaphore
1906*10465441SEvalZero  * The latter 2 can be invoked up by calling netconn_thread_init()/netconn_thread_cleanup().
1907*10465441SEvalZero  * Ports may call these for threads created with sys_thread_new().
1908*10465441SEvalZero  */
1909*10465441SEvalZero #if !defined LWIP_NETCONN_SEM_PER_THREAD || defined __DOXYGEN__
1910*10465441SEvalZero #define LWIP_NETCONN_SEM_PER_THREAD     0
1911*10465441SEvalZero #endif
1912*10465441SEvalZero 
1913*10465441SEvalZero /** LWIP_NETCONN_FULLDUPLEX==1: Enable code that allows reading from one thread,
1914*10465441SEvalZero  * writing from a 2nd thread and closing from a 3rd thread at the same time.
1915*10465441SEvalZero  * ATTENTION: This is currently really alpha! Some requirements:
1916*10465441SEvalZero  * - LWIP_NETCONN_SEM_PER_THREAD==1 is required to use one socket/netconn from
1917*10465441SEvalZero  *   multiple threads at once
1918*10465441SEvalZero  * - sys_mbox_free() has to unblock receive tasks waiting on recvmbox/acceptmbox
1919*10465441SEvalZero  *   and prevent a task pending on this during/after deletion
1920*10465441SEvalZero  */
1921*10465441SEvalZero #if !defined LWIP_NETCONN_FULLDUPLEX || defined __DOXYGEN__
1922*10465441SEvalZero #define LWIP_NETCONN_FULLDUPLEX         0
1923*10465441SEvalZero #endif
1924*10465441SEvalZero /**
1925*10465441SEvalZero  * @}
1926*10465441SEvalZero  */
1927*10465441SEvalZero 
1928*10465441SEvalZero /*
1929*10465441SEvalZero    ------------------------------------
1930*10465441SEvalZero    ---------- Socket options ----------
1931*10465441SEvalZero    ------------------------------------
1932*10465441SEvalZero */
1933*10465441SEvalZero /**
1934*10465441SEvalZero  * @defgroup lwip_opts_socket Sockets
1935*10465441SEvalZero  * @ingroup lwip_opts_threadsafe_apis
1936*10465441SEvalZero  * @{
1937*10465441SEvalZero  */
1938*10465441SEvalZero /**
1939*10465441SEvalZero  * LWIP_SOCKET==1: Enable Socket API (require to use sockets.c)
1940*10465441SEvalZero  */
1941*10465441SEvalZero #if !defined LWIP_SOCKET || defined __DOXYGEN__
1942*10465441SEvalZero #define LWIP_SOCKET                     1
1943*10465441SEvalZero #endif
1944*10465441SEvalZero 
1945*10465441SEvalZero /**
1946*10465441SEvalZero  * LWIP_COMPAT_SOCKETS==1: Enable BSD-style sockets functions names through defines.
1947*10465441SEvalZero  * LWIP_COMPAT_SOCKETS==2: Same as ==1 but correctly named functions are created.
1948*10465441SEvalZero  * While this helps code completion, it might conflict with existing libraries.
1949*10465441SEvalZero  * (only used if you use sockets.c)
1950*10465441SEvalZero  */
1951*10465441SEvalZero #if !defined LWIP_COMPAT_SOCKETS || defined __DOXYGEN__
1952*10465441SEvalZero #define LWIP_COMPAT_SOCKETS             1
1953*10465441SEvalZero #endif
1954*10465441SEvalZero 
1955*10465441SEvalZero /**
1956*10465441SEvalZero  * LWIP_POSIX_SOCKETS_IO_NAMES==1: Enable POSIX-style sockets functions names.
1957*10465441SEvalZero  * Disable this option if you use a POSIX operating system that uses the same
1958*10465441SEvalZero  * names (read, write & close). (only used if you use sockets.c)
1959*10465441SEvalZero  */
1960*10465441SEvalZero #if !defined LWIP_POSIX_SOCKETS_IO_NAMES || defined __DOXYGEN__
1961*10465441SEvalZero #define LWIP_POSIX_SOCKETS_IO_NAMES     1
1962*10465441SEvalZero #endif
1963*10465441SEvalZero 
1964*10465441SEvalZero /**
1965*10465441SEvalZero  * LWIP_SOCKET_OFFSET==n: Increases the file descriptor number created by LwIP with n.
1966*10465441SEvalZero  * This can be useful when there are multiple APIs which create file descriptors.
1967*10465441SEvalZero  * When they all start with a different offset and you won't make them overlap you can
1968*10465441SEvalZero  * re implement read/write/close/ioctl/fnctl to send the requested action to the right
1969*10465441SEvalZero  * library (sharing select will need more work though).
1970*10465441SEvalZero  */
1971*10465441SEvalZero #if !defined LWIP_SOCKET_OFFSET || defined __DOXYGEN__
1972*10465441SEvalZero #define LWIP_SOCKET_OFFSET              0
1973*10465441SEvalZero #endif
1974*10465441SEvalZero 
1975*10465441SEvalZero /**
1976*10465441SEvalZero  * LWIP_TCP_KEEPALIVE==1: Enable TCP_KEEPIDLE, TCP_KEEPINTVL and TCP_KEEPCNT
1977*10465441SEvalZero  * options processing. Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set
1978*10465441SEvalZero  * in seconds. (does not require sockets.c, and will affect tcp.c)
1979*10465441SEvalZero  */
1980*10465441SEvalZero #if !defined LWIP_TCP_KEEPALIVE || defined __DOXYGEN__
1981*10465441SEvalZero #define LWIP_TCP_KEEPALIVE              0
1982*10465441SEvalZero #endif
1983*10465441SEvalZero 
1984*10465441SEvalZero /**
1985*10465441SEvalZero  * LWIP_SO_SNDTIMEO==1: Enable send timeout for sockets/netconns and
1986*10465441SEvalZero  * SO_SNDTIMEO processing.
1987*10465441SEvalZero  */
1988*10465441SEvalZero #if !defined LWIP_SO_SNDTIMEO || defined __DOXYGEN__
1989*10465441SEvalZero #define LWIP_SO_SNDTIMEO                0
1990*10465441SEvalZero #endif
1991*10465441SEvalZero 
1992*10465441SEvalZero /**
1993*10465441SEvalZero  * LWIP_SO_RCVTIMEO==1: Enable receive timeout for sockets/netconns and
1994*10465441SEvalZero  * SO_RCVTIMEO processing.
1995*10465441SEvalZero  */
1996*10465441SEvalZero #if !defined LWIP_SO_RCVTIMEO || defined __DOXYGEN__
1997*10465441SEvalZero #define LWIP_SO_RCVTIMEO                0
1998*10465441SEvalZero #endif
1999*10465441SEvalZero 
2000*10465441SEvalZero /**
2001*10465441SEvalZero  * LWIP_SO_SNDRCVTIMEO_NONSTANDARD==1: SO_RCVTIMEO/SO_SNDTIMEO take an int
2002*10465441SEvalZero  * (milliseconds, much like winsock does) instead of a struct timeval (default).
2003*10465441SEvalZero  */
2004*10465441SEvalZero #if !defined LWIP_SO_SNDRCVTIMEO_NONSTANDARD || defined __DOXYGEN__
2005*10465441SEvalZero #define LWIP_SO_SNDRCVTIMEO_NONSTANDARD 0
2006*10465441SEvalZero #endif
2007*10465441SEvalZero 
2008*10465441SEvalZero /**
2009*10465441SEvalZero  * LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing.
2010*10465441SEvalZero  */
2011*10465441SEvalZero #if !defined LWIP_SO_RCVBUF || defined __DOXYGEN__
2012*10465441SEvalZero #define LWIP_SO_RCVBUF                  0
2013*10465441SEvalZero #endif
2014*10465441SEvalZero 
2015*10465441SEvalZero /**
2016*10465441SEvalZero  * LWIP_SO_LINGER==1: Enable SO_LINGER processing.
2017*10465441SEvalZero  */
2018*10465441SEvalZero #if !defined LWIP_SO_LINGER || defined __DOXYGEN__
2019*10465441SEvalZero #define LWIP_SO_LINGER                  0
2020*10465441SEvalZero #endif
2021*10465441SEvalZero 
2022*10465441SEvalZero /**
2023*10465441SEvalZero  * If LWIP_SO_RCVBUF is used, this is the default value for recv_bufsize.
2024*10465441SEvalZero  */
2025*10465441SEvalZero #if !defined RECV_BUFSIZE_DEFAULT || defined __DOXYGEN__
2026*10465441SEvalZero #define RECV_BUFSIZE_DEFAULT            INT_MAX
2027*10465441SEvalZero #endif
2028*10465441SEvalZero 
2029*10465441SEvalZero /**
2030*10465441SEvalZero  * By default, TCP socket/netconn close waits 20 seconds max to send the FIN
2031*10465441SEvalZero  */
2032*10465441SEvalZero #if !defined LWIP_TCP_CLOSE_TIMEOUT_MS_DEFAULT || defined __DOXYGEN__
2033*10465441SEvalZero #define LWIP_TCP_CLOSE_TIMEOUT_MS_DEFAULT 20000
2034*10465441SEvalZero #endif
2035*10465441SEvalZero 
2036*10465441SEvalZero /**
2037*10465441SEvalZero  * SO_REUSE==1: Enable SO_REUSEADDR option.
2038*10465441SEvalZero  */
2039*10465441SEvalZero #if !defined SO_REUSE || defined __DOXYGEN__
2040*10465441SEvalZero #define SO_REUSE                        0
2041*10465441SEvalZero #endif
2042*10465441SEvalZero 
2043*10465441SEvalZero /**
2044*10465441SEvalZero  * SO_REUSE_RXTOALL==1: Pass a copy of incoming broadcast/multicast packets
2045*10465441SEvalZero  * to all local matches if SO_REUSEADDR is turned on.
2046*10465441SEvalZero  * WARNING: Adds a memcpy for every packet if passing to more than one pcb!
2047*10465441SEvalZero  */
2048*10465441SEvalZero #if !defined SO_REUSE_RXTOALL || defined __DOXYGEN__
2049*10465441SEvalZero #define SO_REUSE_RXTOALL                0
2050*10465441SEvalZero #endif
2051*10465441SEvalZero 
2052*10465441SEvalZero /**
2053*10465441SEvalZero  * LWIP_FIONREAD_LINUXMODE==0 (default): ioctl/FIONREAD returns the amount of
2054*10465441SEvalZero  * pending data in the network buffer. This is the way windows does it. It's
2055*10465441SEvalZero  * the default for lwIP since it is smaller.
2056*10465441SEvalZero  * LWIP_FIONREAD_LINUXMODE==1: ioctl/FIONREAD returns the size of the next
2057*10465441SEvalZero  * pending datagram in bytes. This is the way linux does it. This code is only
2058*10465441SEvalZero  * here for compatibility.
2059*10465441SEvalZero  */
2060*10465441SEvalZero #if !defined LWIP_FIONREAD_LINUXMODE || defined __DOXYGEN__
2061*10465441SEvalZero #define LWIP_FIONREAD_LINUXMODE         0
2062*10465441SEvalZero #endif
2063*10465441SEvalZero 
2064*10465441SEvalZero /**
2065*10465441SEvalZero  * LWIP_SOCKET_SELECT==1 (default): enable select() for sockets (uses a netconn
2066*10465441SEvalZero  * callback to keep track of events).
2067*10465441SEvalZero  * This saves RAM (counters per socket) and code (netconn event callback), which
2068*10465441SEvalZero  * should improve performance a bit).
2069*10465441SEvalZero  */
2070*10465441SEvalZero #if !defined LWIP_SOCKET_SELECT || defined __DOXYGEN__
2071*10465441SEvalZero #define LWIP_SOCKET_SELECT              1
2072*10465441SEvalZero #endif
2073*10465441SEvalZero 
2074*10465441SEvalZero /**
2075*10465441SEvalZero  * LWIP_SOCKET_POLL==1 (default): enable poll() for sockets (including
2076*10465441SEvalZero  * struct pollfd, nfds_t, and constants)
2077*10465441SEvalZero  */
2078*10465441SEvalZero #if !defined LWIP_SOCKET_POLL || defined __DOXYGEN__
2079*10465441SEvalZero #define LWIP_SOCKET_POLL                1
2080*10465441SEvalZero #endif
2081*10465441SEvalZero /**
2082*10465441SEvalZero  * @}
2083*10465441SEvalZero  */
2084*10465441SEvalZero 
2085*10465441SEvalZero /*
2086*10465441SEvalZero    ----------------------------------------
2087*10465441SEvalZero    ---------- Statistics options ----------
2088*10465441SEvalZero    ----------------------------------------
2089*10465441SEvalZero */
2090*10465441SEvalZero /**
2091*10465441SEvalZero  * @defgroup lwip_opts_stats Statistics
2092*10465441SEvalZero  * @ingroup lwip_opts_debug
2093*10465441SEvalZero  * @{
2094*10465441SEvalZero  */
2095*10465441SEvalZero /**
2096*10465441SEvalZero  * LWIP_STATS==1: Enable statistics collection in lwip_stats.
2097*10465441SEvalZero  */
2098*10465441SEvalZero #if !defined LWIP_STATS || defined __DOXYGEN__
2099*10465441SEvalZero #define LWIP_STATS                      1
2100*10465441SEvalZero #endif
2101*10465441SEvalZero 
2102*10465441SEvalZero #if LWIP_STATS
2103*10465441SEvalZero 
2104*10465441SEvalZero /**
2105*10465441SEvalZero  * LWIP_STATS_DISPLAY==1: Compile in the statistics output functions.
2106*10465441SEvalZero  */
2107*10465441SEvalZero #if !defined LWIP_STATS_DISPLAY || defined __DOXYGEN__
2108*10465441SEvalZero #define LWIP_STATS_DISPLAY              0
2109*10465441SEvalZero #endif
2110*10465441SEvalZero 
2111*10465441SEvalZero /**
2112*10465441SEvalZero  * LINK_STATS==1: Enable link stats.
2113*10465441SEvalZero  */
2114*10465441SEvalZero #if !defined LINK_STATS || defined __DOXYGEN__
2115*10465441SEvalZero #define LINK_STATS                      1
2116*10465441SEvalZero #endif
2117*10465441SEvalZero 
2118*10465441SEvalZero /**
2119*10465441SEvalZero  * ETHARP_STATS==1: Enable etharp stats.
2120*10465441SEvalZero  */
2121*10465441SEvalZero #if !defined ETHARP_STATS || defined __DOXYGEN__
2122*10465441SEvalZero #define ETHARP_STATS                    (LWIP_ARP)
2123*10465441SEvalZero #endif
2124*10465441SEvalZero 
2125*10465441SEvalZero /**
2126*10465441SEvalZero  * IP_STATS==1: Enable IP stats.
2127*10465441SEvalZero  */
2128*10465441SEvalZero #if !defined IP_STATS || defined __DOXYGEN__
2129*10465441SEvalZero #define IP_STATS                        1
2130*10465441SEvalZero #endif
2131*10465441SEvalZero 
2132*10465441SEvalZero /**
2133*10465441SEvalZero  * IPFRAG_STATS==1: Enable IP fragmentation stats. Default is
2134*10465441SEvalZero  * on if using either frag or reass.
2135*10465441SEvalZero  */
2136*10465441SEvalZero #if !defined IPFRAG_STATS || defined __DOXYGEN__
2137*10465441SEvalZero #define IPFRAG_STATS                    (IP_REASSEMBLY || IP_FRAG)
2138*10465441SEvalZero #endif
2139*10465441SEvalZero 
2140*10465441SEvalZero /**
2141*10465441SEvalZero  * ICMP_STATS==1: Enable ICMP stats.
2142*10465441SEvalZero  */
2143*10465441SEvalZero #if !defined ICMP_STATS || defined __DOXYGEN__
2144*10465441SEvalZero #define ICMP_STATS                      1
2145*10465441SEvalZero #endif
2146*10465441SEvalZero 
2147*10465441SEvalZero /**
2148*10465441SEvalZero  * IGMP_STATS==1: Enable IGMP stats.
2149*10465441SEvalZero  */
2150*10465441SEvalZero #if !defined IGMP_STATS || defined __DOXYGEN__
2151*10465441SEvalZero #define IGMP_STATS                      (LWIP_IGMP)
2152*10465441SEvalZero #endif
2153*10465441SEvalZero 
2154*10465441SEvalZero /**
2155*10465441SEvalZero  * UDP_STATS==1: Enable UDP stats. Default is on if
2156*10465441SEvalZero  * UDP enabled, otherwise off.
2157*10465441SEvalZero  */
2158*10465441SEvalZero #if !defined UDP_STATS || defined __DOXYGEN__
2159*10465441SEvalZero #define UDP_STATS                       (LWIP_UDP)
2160*10465441SEvalZero #endif
2161*10465441SEvalZero 
2162*10465441SEvalZero /**
2163*10465441SEvalZero  * TCP_STATS==1: Enable TCP stats. Default is on if TCP
2164*10465441SEvalZero  * enabled, otherwise off.
2165*10465441SEvalZero  */
2166*10465441SEvalZero #if !defined TCP_STATS || defined __DOXYGEN__
2167*10465441SEvalZero #define TCP_STATS                       (LWIP_TCP)
2168*10465441SEvalZero #endif
2169*10465441SEvalZero 
2170*10465441SEvalZero /**
2171*10465441SEvalZero  * MEM_STATS==1: Enable mem.c stats.
2172*10465441SEvalZero  */
2173*10465441SEvalZero #if !defined MEM_STATS || defined __DOXYGEN__
2174*10465441SEvalZero #define MEM_STATS                       ((MEM_LIBC_MALLOC == 0) && (MEM_USE_POOLS == 0))
2175*10465441SEvalZero #endif
2176*10465441SEvalZero 
2177*10465441SEvalZero /**
2178*10465441SEvalZero  * MEMP_STATS==1: Enable memp.c pool stats.
2179*10465441SEvalZero  */
2180*10465441SEvalZero #if !defined MEMP_STATS || defined __DOXYGEN__
2181*10465441SEvalZero #define MEMP_STATS                      (MEMP_MEM_MALLOC == 0)
2182*10465441SEvalZero #endif
2183*10465441SEvalZero 
2184*10465441SEvalZero /**
2185*10465441SEvalZero  * SYS_STATS==1: Enable system stats (sem and mbox counts, etc).
2186*10465441SEvalZero  */
2187*10465441SEvalZero #if !defined SYS_STATS || defined __DOXYGEN__
2188*10465441SEvalZero #define SYS_STATS                       (NO_SYS == 0)
2189*10465441SEvalZero #endif
2190*10465441SEvalZero 
2191*10465441SEvalZero /**
2192*10465441SEvalZero  * IP6_STATS==1: Enable IPv6 stats.
2193*10465441SEvalZero  */
2194*10465441SEvalZero #if !defined IP6_STATS || defined __DOXYGEN__
2195*10465441SEvalZero #define IP6_STATS                       (LWIP_IPV6)
2196*10465441SEvalZero #endif
2197*10465441SEvalZero 
2198*10465441SEvalZero /**
2199*10465441SEvalZero  * ICMP6_STATS==1: Enable ICMP for IPv6 stats.
2200*10465441SEvalZero  */
2201*10465441SEvalZero #if !defined ICMP6_STATS || defined __DOXYGEN__
2202*10465441SEvalZero #define ICMP6_STATS                     (LWIP_IPV6 && LWIP_ICMP6)
2203*10465441SEvalZero #endif
2204*10465441SEvalZero 
2205*10465441SEvalZero /**
2206*10465441SEvalZero  * IP6_FRAG_STATS==1: Enable IPv6 fragmentation stats.
2207*10465441SEvalZero  */
2208*10465441SEvalZero #if !defined IP6_FRAG_STATS || defined __DOXYGEN__
2209*10465441SEvalZero #define IP6_FRAG_STATS                  (LWIP_IPV6 && (LWIP_IPV6_FRAG || LWIP_IPV6_REASS))
2210*10465441SEvalZero #endif
2211*10465441SEvalZero 
2212*10465441SEvalZero /**
2213*10465441SEvalZero  * MLD6_STATS==1: Enable MLD for IPv6 stats.
2214*10465441SEvalZero  */
2215*10465441SEvalZero #if !defined MLD6_STATS || defined __DOXYGEN__
2216*10465441SEvalZero #define MLD6_STATS                      (LWIP_IPV6 && LWIP_IPV6_MLD)
2217*10465441SEvalZero #endif
2218*10465441SEvalZero 
2219*10465441SEvalZero /**
2220*10465441SEvalZero  * ND6_STATS==1: Enable Neighbor discovery for IPv6 stats.
2221*10465441SEvalZero  */
2222*10465441SEvalZero #if !defined ND6_STATS || defined __DOXYGEN__
2223*10465441SEvalZero #define ND6_STATS                       (LWIP_IPV6)
2224*10465441SEvalZero #endif
2225*10465441SEvalZero 
2226*10465441SEvalZero /**
2227*10465441SEvalZero  * MIB2_STATS==1: Stats for SNMP MIB2.
2228*10465441SEvalZero  */
2229*10465441SEvalZero #if !defined MIB2_STATS || defined __DOXYGEN__
2230*10465441SEvalZero #define MIB2_STATS                      0
2231*10465441SEvalZero #endif
2232*10465441SEvalZero 
2233*10465441SEvalZero #else
2234*10465441SEvalZero 
2235*10465441SEvalZero #define LINK_STATS                      0
2236*10465441SEvalZero #define ETHARP_STATS                    0
2237*10465441SEvalZero #define IP_STATS                        0
2238*10465441SEvalZero #define IPFRAG_STATS                    0
2239*10465441SEvalZero #define ICMP_STATS                      0
2240*10465441SEvalZero #define IGMP_STATS                      0
2241*10465441SEvalZero #define UDP_STATS                       0
2242*10465441SEvalZero #define TCP_STATS                       0
2243*10465441SEvalZero #define MEM_STATS                       0
2244*10465441SEvalZero #define MEMP_STATS                      0
2245*10465441SEvalZero #define SYS_STATS                       0
2246*10465441SEvalZero #define LWIP_STATS_DISPLAY              0
2247*10465441SEvalZero #define IP6_STATS                       0
2248*10465441SEvalZero #define ICMP6_STATS                     0
2249*10465441SEvalZero #define IP6_FRAG_STATS                  0
2250*10465441SEvalZero #define MLD6_STATS                      0
2251*10465441SEvalZero #define ND6_STATS                       0
2252*10465441SEvalZero #define MIB2_STATS                      0
2253*10465441SEvalZero 
2254*10465441SEvalZero #endif /* LWIP_STATS */
2255*10465441SEvalZero /**
2256*10465441SEvalZero  * @}
2257*10465441SEvalZero  */
2258*10465441SEvalZero 
2259*10465441SEvalZero /*
2260*10465441SEvalZero    --------------------------------------
2261*10465441SEvalZero    ---------- Checksum options ----------
2262*10465441SEvalZero    --------------------------------------
2263*10465441SEvalZero */
2264*10465441SEvalZero /**
2265*10465441SEvalZero  * @defgroup lwip_opts_checksum Checksum
2266*10465441SEvalZero  * @ingroup lwip_opts_infrastructure
2267*10465441SEvalZero  * @{
2268*10465441SEvalZero  */
2269*10465441SEvalZero /**
2270*10465441SEvalZero  * LWIP_CHECKSUM_CTRL_PER_NETIF==1: Checksum generation/check can be enabled/disabled
2271*10465441SEvalZero  * per netif.
2272*10465441SEvalZero  * ATTENTION: if enabled, the CHECKSUM_GEN_* and CHECKSUM_CHECK_* defines must be enabled!
2273*10465441SEvalZero  */
2274*10465441SEvalZero #if !defined LWIP_CHECKSUM_CTRL_PER_NETIF || defined __DOXYGEN__
2275*10465441SEvalZero #define LWIP_CHECKSUM_CTRL_PER_NETIF    0
2276*10465441SEvalZero #endif
2277*10465441SEvalZero 
2278*10465441SEvalZero /**
2279*10465441SEvalZero  * CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets.
2280*10465441SEvalZero  */
2281*10465441SEvalZero #if !defined CHECKSUM_GEN_IP || defined __DOXYGEN__
2282*10465441SEvalZero #define CHECKSUM_GEN_IP                 1
2283*10465441SEvalZero #endif
2284*10465441SEvalZero 
2285*10465441SEvalZero /**
2286*10465441SEvalZero  * CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets.
2287*10465441SEvalZero  */
2288*10465441SEvalZero #if !defined CHECKSUM_GEN_UDP || defined __DOXYGEN__
2289*10465441SEvalZero #define CHECKSUM_GEN_UDP                1
2290*10465441SEvalZero #endif
2291*10465441SEvalZero 
2292*10465441SEvalZero /**
2293*10465441SEvalZero  * CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets.
2294*10465441SEvalZero  */
2295*10465441SEvalZero #if !defined CHECKSUM_GEN_TCP || defined __DOXYGEN__
2296*10465441SEvalZero #define CHECKSUM_GEN_TCP                1
2297*10465441SEvalZero #endif
2298*10465441SEvalZero 
2299*10465441SEvalZero /**
2300*10465441SEvalZero  * CHECKSUM_GEN_ICMP==1: Generate checksums in software for outgoing ICMP packets.
2301*10465441SEvalZero  */
2302*10465441SEvalZero #if !defined CHECKSUM_GEN_ICMP || defined __DOXYGEN__
2303*10465441SEvalZero #define CHECKSUM_GEN_ICMP               1
2304*10465441SEvalZero #endif
2305*10465441SEvalZero 
2306*10465441SEvalZero /**
2307*10465441SEvalZero  * CHECKSUM_GEN_ICMP6==1: Generate checksums in software for outgoing ICMP6 packets.
2308*10465441SEvalZero  */
2309*10465441SEvalZero #if !defined CHECKSUM_GEN_ICMP6 || defined __DOXYGEN__
2310*10465441SEvalZero #define CHECKSUM_GEN_ICMP6              1
2311*10465441SEvalZero #endif
2312*10465441SEvalZero 
2313*10465441SEvalZero /**
2314*10465441SEvalZero  * CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets.
2315*10465441SEvalZero  */
2316*10465441SEvalZero #if !defined CHECKSUM_CHECK_IP || defined __DOXYGEN__
2317*10465441SEvalZero #define CHECKSUM_CHECK_IP               1
2318*10465441SEvalZero #endif
2319*10465441SEvalZero 
2320*10465441SEvalZero /**
2321*10465441SEvalZero  * CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets.
2322*10465441SEvalZero  */
2323*10465441SEvalZero #if !defined CHECKSUM_CHECK_UDP || defined __DOXYGEN__
2324*10465441SEvalZero #define CHECKSUM_CHECK_UDP              1
2325*10465441SEvalZero #endif
2326*10465441SEvalZero 
2327*10465441SEvalZero /**
2328*10465441SEvalZero  * CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets.
2329*10465441SEvalZero  */
2330*10465441SEvalZero #if !defined CHECKSUM_CHECK_TCP || defined __DOXYGEN__
2331*10465441SEvalZero #define CHECKSUM_CHECK_TCP              1
2332*10465441SEvalZero #endif
2333*10465441SEvalZero 
2334*10465441SEvalZero /**
2335*10465441SEvalZero  * CHECKSUM_CHECK_ICMP==1: Check checksums in software for incoming ICMP packets.
2336*10465441SEvalZero  */
2337*10465441SEvalZero #if !defined CHECKSUM_CHECK_ICMP || defined __DOXYGEN__
2338*10465441SEvalZero #define CHECKSUM_CHECK_ICMP             1
2339*10465441SEvalZero #endif
2340*10465441SEvalZero 
2341*10465441SEvalZero /**
2342*10465441SEvalZero  * CHECKSUM_CHECK_ICMP6==1: Check checksums in software for incoming ICMPv6 packets
2343*10465441SEvalZero  */
2344*10465441SEvalZero #if !defined CHECKSUM_CHECK_ICMP6 || defined __DOXYGEN__
2345*10465441SEvalZero #define CHECKSUM_CHECK_ICMP6            1
2346*10465441SEvalZero #endif
2347*10465441SEvalZero 
2348*10465441SEvalZero /**
2349*10465441SEvalZero  * LWIP_CHECKSUM_ON_COPY==1: Calculate checksum when copying data from
2350*10465441SEvalZero  * application buffers to pbufs.
2351*10465441SEvalZero  */
2352*10465441SEvalZero #if !defined LWIP_CHECKSUM_ON_COPY || defined __DOXYGEN__
2353*10465441SEvalZero #define LWIP_CHECKSUM_ON_COPY           0
2354*10465441SEvalZero #endif
2355*10465441SEvalZero /**
2356*10465441SEvalZero  * @}
2357*10465441SEvalZero  */
2358*10465441SEvalZero 
2359*10465441SEvalZero /*
2360*10465441SEvalZero    ---------------------------------------
2361*10465441SEvalZero    ---------- IPv6 options ---------------
2362*10465441SEvalZero    ---------------------------------------
2363*10465441SEvalZero */
2364*10465441SEvalZero /**
2365*10465441SEvalZero  * @defgroup lwip_opts_ipv6 IPv6
2366*10465441SEvalZero  * @ingroup lwip_opts
2367*10465441SEvalZero  * @{
2368*10465441SEvalZero  */
2369*10465441SEvalZero /**
2370*10465441SEvalZero  * LWIP_IPV6==1: Enable IPv6
2371*10465441SEvalZero  */
2372*10465441SEvalZero #if !defined LWIP_IPV6 || defined __DOXYGEN__
2373*10465441SEvalZero #define LWIP_IPV6                       0
2374*10465441SEvalZero #endif
2375*10465441SEvalZero 
2376*10465441SEvalZero /**
2377*10465441SEvalZero  * IPV6_REASS_MAXAGE: Maximum time (in multiples of IP6_REASS_TMR_INTERVAL - so seconds, normally)
2378*10465441SEvalZero  * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived
2379*10465441SEvalZero  * in this time, the whole packet is discarded.
2380*10465441SEvalZero  */
2381*10465441SEvalZero #if !defined IPV6_REASS_MAXAGE || defined __DOXYGEN__
2382*10465441SEvalZero #define IPV6_REASS_MAXAGE               60
2383*10465441SEvalZero #endif
2384*10465441SEvalZero 
2385*10465441SEvalZero /**
2386*10465441SEvalZero  * LWIP_IPV6_SCOPES==1: Enable support for IPv6 address scopes, ensuring that
2387*10465441SEvalZero  * e.g. link-local addresses are really treated as link-local. Disable this
2388*10465441SEvalZero  * setting only for single-interface configurations.
2389*10465441SEvalZero  * All addresses that have a scope according to the default policy (link-local
2390*10465441SEvalZero  * unicast addresses, interface-local and link-local multicast addresses) should
2391*10465441SEvalZero  * now have a zone set on them before being passed to the core API, although
2392*10465441SEvalZero  * lwIP will currently attempt to select a zone on the caller's behalf when
2393*10465441SEvalZero  * necessary. Applications that directly assign IPv6 addresses to interfaces
2394*10465441SEvalZero  * (which is NOT recommended) must now ensure that link-local addresses carry
2395*10465441SEvalZero  * the netif's zone. See the new ip6_zone.h header file for more information and
2396*10465441SEvalZero  * relevant macros. For now it is still possible to turn off scopes support
2397*10465441SEvalZero  * through the new LWIP_IPV6_SCOPES option. When upgrading an implementation that
2398*10465441SEvalZero  * uses the core API directly, it is highly recommended to enable
2399*10465441SEvalZero  * LWIP_IPV6_SCOPES_DEBUG at least for a while, to ensure e.g. proper address
2400*10465441SEvalZero  * initialization.
2401*10465441SEvalZero  */
2402*10465441SEvalZero #if !defined LWIP_IPV6_SCOPES || defined __DOXYGEN__
2403*10465441SEvalZero #define LWIP_IPV6_SCOPES                (LWIP_IPV6 && !LWIP_SINGLE_NETIF)
2404*10465441SEvalZero #endif
2405*10465441SEvalZero 
2406*10465441SEvalZero /**
2407*10465441SEvalZero  * LWIP_IPV6_SCOPES_DEBUG==1: Perform run-time checks to verify that addresses
2408*10465441SEvalZero  * are properly zoned (see ip6_zone.h on what that means) where it matters.
2409*10465441SEvalZero  * Enabling this setting is highly recommended when upgrading from an existing
2410*10465441SEvalZero  * installation that is not yet scope-aware; otherwise it may be too expensive.
2411*10465441SEvalZero  */
2412*10465441SEvalZero #if !defined LWIP_IPV6_SCOPES_DEBUG || defined __DOXYGEN__
2413*10465441SEvalZero #define LWIP_IPV6_SCOPES_DEBUG          0
2414*10465441SEvalZero #endif
2415*10465441SEvalZero 
2416*10465441SEvalZero /**
2417*10465441SEvalZero  * LWIP_IPV6_NUM_ADDRESSES: Number of IPv6 addresses per netif.
2418*10465441SEvalZero  */
2419*10465441SEvalZero #if !defined LWIP_IPV6_NUM_ADDRESSES || defined __DOXYGEN__
2420*10465441SEvalZero #define LWIP_IPV6_NUM_ADDRESSES         3
2421*10465441SEvalZero #endif
2422*10465441SEvalZero 
2423*10465441SEvalZero /**
2424*10465441SEvalZero  * LWIP_IPV6_FORWARD==1: Forward IPv6 packets across netifs
2425*10465441SEvalZero  */
2426*10465441SEvalZero #if !defined LWIP_IPV6_FORWARD || defined __DOXYGEN__
2427*10465441SEvalZero #define LWIP_IPV6_FORWARD               0
2428*10465441SEvalZero #endif
2429*10465441SEvalZero 
2430*10465441SEvalZero /**
2431*10465441SEvalZero  * LWIP_IPV6_FRAG==1: Fragment outgoing IPv6 packets that are too big.
2432*10465441SEvalZero  */
2433*10465441SEvalZero #if !defined LWIP_IPV6_FRAG || defined __DOXYGEN__
2434*10465441SEvalZero #define LWIP_IPV6_FRAG                  1
2435*10465441SEvalZero #endif
2436*10465441SEvalZero 
2437*10465441SEvalZero /**
2438*10465441SEvalZero  * LWIP_IPV6_REASS==1: reassemble incoming IPv6 packets that fragmented
2439*10465441SEvalZero  */
2440*10465441SEvalZero #if !defined LWIP_IPV6_REASS || defined __DOXYGEN__
2441*10465441SEvalZero #define LWIP_IPV6_REASS                 LWIP_IPV6
2442*10465441SEvalZero #endif
2443*10465441SEvalZero 
2444*10465441SEvalZero /**
2445*10465441SEvalZero  * LWIP_IPV6_SEND_ROUTER_SOLICIT==1: Send router solicitation messages during
2446*10465441SEvalZero  * network startup.
2447*10465441SEvalZero  */
2448*10465441SEvalZero #if !defined LWIP_IPV6_SEND_ROUTER_SOLICIT || defined __DOXYGEN__
2449*10465441SEvalZero #define LWIP_IPV6_SEND_ROUTER_SOLICIT   1
2450*10465441SEvalZero #endif
2451*10465441SEvalZero 
2452*10465441SEvalZero /**
2453*10465441SEvalZero  * LWIP_IPV6_AUTOCONFIG==1: Enable stateless address autoconfiguration as per RFC 4862.
2454*10465441SEvalZero  */
2455*10465441SEvalZero #if !defined LWIP_IPV6_AUTOCONFIG || defined __DOXYGEN__
2456*10465441SEvalZero #define LWIP_IPV6_AUTOCONFIG            LWIP_IPV6
2457*10465441SEvalZero #endif
2458*10465441SEvalZero 
2459*10465441SEvalZero /**
2460*10465441SEvalZero  * LWIP_IPV6_ADDRESS_LIFETIMES==1: Keep valid and preferred lifetimes for each
2461*10465441SEvalZero  * IPv6 address. Required for LWIP_IPV6_AUTOCONFIG. May still be enabled
2462*10465441SEvalZero  * otherwise, in which case the application may assign address lifetimes with
2463*10465441SEvalZero  * the appropriate macros. Addresses with no lifetime are assumed to be static.
2464*10465441SEvalZero  * If this option is disabled, all addresses are assumed to be static.
2465*10465441SEvalZero  */
2466*10465441SEvalZero #if !defined LWIP_IPV6_ADDRESS_LIFETIMES || defined __DOXYGEN__
2467*10465441SEvalZero #define LWIP_IPV6_ADDRESS_LIFETIMES     LWIP_IPV6_AUTOCONFIG
2468*10465441SEvalZero #endif
2469*10465441SEvalZero 
2470*10465441SEvalZero /**
2471*10465441SEvalZero  * LWIP_IPV6_DUP_DETECT_ATTEMPTS=[0..7]: Number of duplicate address detection attempts.
2472*10465441SEvalZero  */
2473*10465441SEvalZero #if !defined LWIP_IPV6_DUP_DETECT_ATTEMPTS || defined __DOXYGEN__
2474*10465441SEvalZero #define LWIP_IPV6_DUP_DETECT_ATTEMPTS   1
2475*10465441SEvalZero #endif
2476*10465441SEvalZero /**
2477*10465441SEvalZero  * @}
2478*10465441SEvalZero  */
2479*10465441SEvalZero 
2480*10465441SEvalZero /**
2481*10465441SEvalZero  * @defgroup lwip_opts_icmp6 ICMP6
2482*10465441SEvalZero  * @ingroup lwip_opts_ipv6
2483*10465441SEvalZero  * @{
2484*10465441SEvalZero  */
2485*10465441SEvalZero /**
2486*10465441SEvalZero  * LWIP_ICMP6==1: Enable ICMPv6 (mandatory per RFC)
2487*10465441SEvalZero  */
2488*10465441SEvalZero #if !defined LWIP_ICMP6 || defined __DOXYGEN__
2489*10465441SEvalZero #define LWIP_ICMP6                      LWIP_IPV6
2490*10465441SEvalZero #endif
2491*10465441SEvalZero 
2492*10465441SEvalZero /**
2493*10465441SEvalZero  * LWIP_ICMP6_DATASIZE: bytes from original packet to send back in
2494*10465441SEvalZero  * ICMPv6 error messages.
2495*10465441SEvalZero  */
2496*10465441SEvalZero #if !defined LWIP_ICMP6_DATASIZE || defined __DOXYGEN__
2497*10465441SEvalZero #define LWIP_ICMP6_DATASIZE             8
2498*10465441SEvalZero #endif
2499*10465441SEvalZero 
2500*10465441SEvalZero /**
2501*10465441SEvalZero  * LWIP_ICMP6_HL: default hop limit for ICMPv6 messages
2502*10465441SEvalZero  */
2503*10465441SEvalZero #if !defined LWIP_ICMP6_HL || defined __DOXYGEN__
2504*10465441SEvalZero #define LWIP_ICMP6_HL                   255
2505*10465441SEvalZero #endif
2506*10465441SEvalZero /**
2507*10465441SEvalZero  * @}
2508*10465441SEvalZero  */
2509*10465441SEvalZero 
2510*10465441SEvalZero /**
2511*10465441SEvalZero  * @defgroup lwip_opts_mld6 Multicast listener discovery
2512*10465441SEvalZero  * @ingroup lwip_opts_ipv6
2513*10465441SEvalZero  * @{
2514*10465441SEvalZero  */
2515*10465441SEvalZero /**
2516*10465441SEvalZero  * LWIP_IPV6_MLD==1: Enable multicast listener discovery protocol.
2517*10465441SEvalZero  * If LWIP_IPV6 is enabled but this setting is disabled, the MAC layer must
2518*10465441SEvalZero  * indiscriminately pass all inbound IPv6 multicast traffic to lwIP.
2519*10465441SEvalZero  */
2520*10465441SEvalZero #if !defined LWIP_IPV6_MLD || defined __DOXYGEN__
2521*10465441SEvalZero #define LWIP_IPV6_MLD                   LWIP_IPV6
2522*10465441SEvalZero #endif
2523*10465441SEvalZero 
2524*10465441SEvalZero /**
2525*10465441SEvalZero  * MEMP_NUM_MLD6_GROUP: Max number of IPv6 multicast groups that can be joined.
2526*10465441SEvalZero  * There must be enough groups so that each netif can join the solicited-node
2527*10465441SEvalZero  * multicast group for each of its local addresses, plus one for MDNS if
2528*10465441SEvalZero  * applicable, plus any number of groups to be joined on UDP sockets.
2529*10465441SEvalZero  */
2530*10465441SEvalZero #if !defined MEMP_NUM_MLD6_GROUP || defined __DOXYGEN__
2531*10465441SEvalZero #define MEMP_NUM_MLD6_GROUP             4
2532*10465441SEvalZero #endif
2533*10465441SEvalZero /**
2534*10465441SEvalZero  * @}
2535*10465441SEvalZero  */
2536*10465441SEvalZero 
2537*10465441SEvalZero /**
2538*10465441SEvalZero  * @defgroup lwip_opts_nd6 Neighbor discovery
2539*10465441SEvalZero  * @ingroup lwip_opts_ipv6
2540*10465441SEvalZero  * @{
2541*10465441SEvalZero  */
2542*10465441SEvalZero /**
2543*10465441SEvalZero  * LWIP_ND6_QUEUEING==1: queue outgoing IPv6 packets while MAC address
2544*10465441SEvalZero  * is being resolved.
2545*10465441SEvalZero  */
2546*10465441SEvalZero #if !defined LWIP_ND6_QUEUEING || defined __DOXYGEN__
2547*10465441SEvalZero #define LWIP_ND6_QUEUEING               LWIP_IPV6
2548*10465441SEvalZero #endif
2549*10465441SEvalZero 
2550*10465441SEvalZero /**
2551*10465441SEvalZero  * MEMP_NUM_ND6_QUEUE: Max number of IPv6 packets to queue during MAC resolution.
2552*10465441SEvalZero  */
2553*10465441SEvalZero #if !defined MEMP_NUM_ND6_QUEUE || defined __DOXYGEN__
2554*10465441SEvalZero #define MEMP_NUM_ND6_QUEUE              20
2555*10465441SEvalZero #endif
2556*10465441SEvalZero 
2557*10465441SEvalZero /**
2558*10465441SEvalZero  * LWIP_ND6_NUM_NEIGHBORS: Number of entries in IPv6 neighbor cache
2559*10465441SEvalZero  */
2560*10465441SEvalZero #if !defined LWIP_ND6_NUM_NEIGHBORS || defined __DOXYGEN__
2561*10465441SEvalZero #define LWIP_ND6_NUM_NEIGHBORS          10
2562*10465441SEvalZero #endif
2563*10465441SEvalZero 
2564*10465441SEvalZero /**
2565*10465441SEvalZero  * LWIP_ND6_NUM_DESTINATIONS: number of entries in IPv6 destination cache
2566*10465441SEvalZero  */
2567*10465441SEvalZero #if !defined LWIP_ND6_NUM_DESTINATIONS || defined __DOXYGEN__
2568*10465441SEvalZero #define LWIP_ND6_NUM_DESTINATIONS       10
2569*10465441SEvalZero #endif
2570*10465441SEvalZero 
2571*10465441SEvalZero /**
2572*10465441SEvalZero  * LWIP_ND6_NUM_PREFIXES: number of entries in IPv6 on-link prefixes cache
2573*10465441SEvalZero  */
2574*10465441SEvalZero #if !defined LWIP_ND6_NUM_PREFIXES || defined __DOXYGEN__
2575*10465441SEvalZero #define LWIP_ND6_NUM_PREFIXES           5
2576*10465441SEvalZero #endif
2577*10465441SEvalZero 
2578*10465441SEvalZero /**
2579*10465441SEvalZero  * LWIP_ND6_NUM_ROUTERS: number of entries in IPv6 default router cache
2580*10465441SEvalZero  */
2581*10465441SEvalZero #if !defined LWIP_ND6_NUM_ROUTERS || defined __DOXYGEN__
2582*10465441SEvalZero #define LWIP_ND6_NUM_ROUTERS            3
2583*10465441SEvalZero #endif
2584*10465441SEvalZero 
2585*10465441SEvalZero /**
2586*10465441SEvalZero  * LWIP_ND6_MAX_MULTICAST_SOLICIT: max number of multicast solicit messages to send
2587*10465441SEvalZero  * (neighbor solicit and router solicit)
2588*10465441SEvalZero  */
2589*10465441SEvalZero #if !defined LWIP_ND6_MAX_MULTICAST_SOLICIT || defined __DOXYGEN__
2590*10465441SEvalZero #define LWIP_ND6_MAX_MULTICAST_SOLICIT  3
2591*10465441SEvalZero #endif
2592*10465441SEvalZero 
2593*10465441SEvalZero /**
2594*10465441SEvalZero  * LWIP_ND6_MAX_UNICAST_SOLICIT: max number of unicast neighbor solicitation messages
2595*10465441SEvalZero  * to send during neighbor reachability detection.
2596*10465441SEvalZero  */
2597*10465441SEvalZero #if !defined LWIP_ND6_MAX_UNICAST_SOLICIT || defined __DOXYGEN__
2598*10465441SEvalZero #define LWIP_ND6_MAX_UNICAST_SOLICIT    3
2599*10465441SEvalZero #endif
2600*10465441SEvalZero 
2601*10465441SEvalZero /**
2602*10465441SEvalZero  * Unused: See ND RFC (time in milliseconds).
2603*10465441SEvalZero  */
2604*10465441SEvalZero #if !defined LWIP_ND6_MAX_ANYCAST_DELAY_TIME || defined __DOXYGEN__
2605*10465441SEvalZero #define LWIP_ND6_MAX_ANYCAST_DELAY_TIME 1000
2606*10465441SEvalZero #endif
2607*10465441SEvalZero 
2608*10465441SEvalZero /**
2609*10465441SEvalZero  * Unused: See ND RFC
2610*10465441SEvalZero  */
2611*10465441SEvalZero #if !defined LWIP_ND6_MAX_NEIGHBOR_ADVERTISEMENT || defined __DOXYGEN__
2612*10465441SEvalZero #define LWIP_ND6_MAX_NEIGHBOR_ADVERTISEMENT  3
2613*10465441SEvalZero #endif
2614*10465441SEvalZero 
2615*10465441SEvalZero /**
2616*10465441SEvalZero  * LWIP_ND6_REACHABLE_TIME: default neighbor reachable time (in milliseconds).
2617*10465441SEvalZero  * May be updated by router advertisement messages.
2618*10465441SEvalZero  */
2619*10465441SEvalZero #if !defined LWIP_ND6_REACHABLE_TIME || defined __DOXYGEN__
2620*10465441SEvalZero #define LWIP_ND6_REACHABLE_TIME         30000
2621*10465441SEvalZero #endif
2622*10465441SEvalZero 
2623*10465441SEvalZero /**
2624*10465441SEvalZero  * LWIP_ND6_RETRANS_TIMER: default retransmission timer for solicitation messages
2625*10465441SEvalZero  */
2626*10465441SEvalZero #if !defined LWIP_ND6_RETRANS_TIMER || defined __DOXYGEN__
2627*10465441SEvalZero #define LWIP_ND6_RETRANS_TIMER          1000
2628*10465441SEvalZero #endif
2629*10465441SEvalZero 
2630*10465441SEvalZero /**
2631*10465441SEvalZero  * LWIP_ND6_DELAY_FIRST_PROBE_TIME: Delay before first unicast neighbor solicitation
2632*10465441SEvalZero  * message is sent, during neighbor reachability detection.
2633*10465441SEvalZero  */
2634*10465441SEvalZero #if !defined LWIP_ND6_DELAY_FIRST_PROBE_TIME || defined __DOXYGEN__
2635*10465441SEvalZero #define LWIP_ND6_DELAY_FIRST_PROBE_TIME 5000
2636*10465441SEvalZero #endif
2637*10465441SEvalZero 
2638*10465441SEvalZero /**
2639*10465441SEvalZero  * LWIP_ND6_ALLOW_RA_UPDATES==1: Allow Router Advertisement messages to update
2640*10465441SEvalZero  * Reachable time and retransmission timers, and netif MTU.
2641*10465441SEvalZero  */
2642*10465441SEvalZero #if !defined LWIP_ND6_ALLOW_RA_UPDATES || defined __DOXYGEN__
2643*10465441SEvalZero #define LWIP_ND6_ALLOW_RA_UPDATES       1
2644*10465441SEvalZero #endif
2645*10465441SEvalZero 
2646*10465441SEvalZero /**
2647*10465441SEvalZero  * LWIP_ND6_TCP_REACHABILITY_HINTS==1: Allow TCP to provide Neighbor Discovery
2648*10465441SEvalZero  * with reachability hints for connected destinations. This helps avoid sending
2649*10465441SEvalZero  * unicast neighbor solicitation messages.
2650*10465441SEvalZero  */
2651*10465441SEvalZero #if !defined LWIP_ND6_TCP_REACHABILITY_HINTS || defined __DOXYGEN__
2652*10465441SEvalZero #define LWIP_ND6_TCP_REACHABILITY_HINTS 1
2653*10465441SEvalZero #endif
2654*10465441SEvalZero 
2655*10465441SEvalZero /**
2656*10465441SEvalZero  * LWIP_ND6_RDNSS_MAX_DNS_SERVERS > 0: Use IPv6 Router Advertisement Recursive
2657*10465441SEvalZero  * DNS Server Option (as per RFC 6106) to copy a defined maximum number of DNS
2658*10465441SEvalZero  * servers to the DNS module.
2659*10465441SEvalZero  */
2660*10465441SEvalZero #if !defined LWIP_ND6_RDNSS_MAX_DNS_SERVERS || defined __DOXYGEN__
2661*10465441SEvalZero #define LWIP_ND6_RDNSS_MAX_DNS_SERVERS  0
2662*10465441SEvalZero #endif
2663*10465441SEvalZero /**
2664*10465441SEvalZero  * @}
2665*10465441SEvalZero  */
2666*10465441SEvalZero 
2667*10465441SEvalZero /**
2668*10465441SEvalZero  * @defgroup lwip_opts_dhcpv6 DHCPv6
2669*10465441SEvalZero  * @ingroup lwip_opts_ipv6
2670*10465441SEvalZero  * @{
2671*10465441SEvalZero  */
2672*10465441SEvalZero /**
2673*10465441SEvalZero  * LWIP_IPV6_DHCP6==1: enable DHCPv6 stateful/stateless address autoconfiguration.
2674*10465441SEvalZero  */
2675*10465441SEvalZero #if !defined LWIP_IPV6_DHCP6 || defined __DOXYGEN__
2676*10465441SEvalZero #define LWIP_IPV6_DHCP6                 0
2677*10465441SEvalZero #endif
2678*10465441SEvalZero 
2679*10465441SEvalZero /**
2680*10465441SEvalZero  * LWIP_IPV6_DHCP6_STATEFUL==1: enable DHCPv6 stateful address autoconfiguration.
2681*10465441SEvalZero  * (not supported, yet!)
2682*10465441SEvalZero  */
2683*10465441SEvalZero #if !defined LWIP_IPV6_DHCP6_STATEFUL || defined __DOXYGEN__
2684*10465441SEvalZero #define LWIP_IPV6_DHCP6_STATEFUL        0
2685*10465441SEvalZero #endif
2686*10465441SEvalZero 
2687*10465441SEvalZero /**
2688*10465441SEvalZero  * LWIP_IPV6_DHCP6_STATELESS==1: enable DHCPv6 stateless address autoconfiguration.
2689*10465441SEvalZero  */
2690*10465441SEvalZero #if !defined LWIP_IPV6_DHCP6_STATELESS || defined __DOXYGEN__
2691*10465441SEvalZero #define LWIP_IPV6_DHCP6_STATELESS       LWIP_IPV6_DHCP6
2692*10465441SEvalZero #endif
2693*10465441SEvalZero 
2694*10465441SEvalZero /**
2695*10465441SEvalZero  * LWIP_DHCP6_GETS_NTP==1: Request NTP servers via DHCPv6. For each
2696*10465441SEvalZero  * response packet, a callback is called, which has to be provided by the port:
2697*10465441SEvalZero  * void dhcp6_set_ntp_servers(u8_t num_ntp_servers, ip_addr_t* ntp_server_addrs);
2698*10465441SEvalZero */
2699*10465441SEvalZero #if !defined LWIP_DHCP6_GET_NTP_SRV || defined __DOXYGEN__
2700*10465441SEvalZero #define LWIP_DHCP6_GET_NTP_SRV          0
2701*10465441SEvalZero #endif
2702*10465441SEvalZero 
2703*10465441SEvalZero /**
2704*10465441SEvalZero  * The maximum of NTP servers requested
2705*10465441SEvalZero  */
2706*10465441SEvalZero #if !defined LWIP_DHCP6_MAX_NTP_SERVERS || defined __DOXYGEN__
2707*10465441SEvalZero #define LWIP_DHCP6_MAX_NTP_SERVERS      1
2708*10465441SEvalZero #endif
2709*10465441SEvalZero 
2710*10465441SEvalZero /**
2711*10465441SEvalZero  * LWIP_DHCP6_MAX_DNS_SERVERS > 0: Request DNS servers via DHCPv6.
2712*10465441SEvalZero  * DNS servers received in the response are passed to DNS via @ref dns_setserver()
2713*10465441SEvalZero  * (up to the maximum limit defined here).
2714*10465441SEvalZero  */
2715*10465441SEvalZero #if !defined LWIP_DHCP6_MAX_DNS_SERVERS || defined __DOXYGEN__
2716*10465441SEvalZero #define LWIP_DHCP6_MAX_DNS_SERVERS      DNS_MAX_SERVERS
2717*10465441SEvalZero #endif
2718*10465441SEvalZero /**
2719*10465441SEvalZero  * @}
2720*10465441SEvalZero  */
2721*10465441SEvalZero 
2722*10465441SEvalZero /*
2723*10465441SEvalZero    ---------------------------------------
2724*10465441SEvalZero    ---------- Hook options ---------------
2725*10465441SEvalZero    ---------------------------------------
2726*10465441SEvalZero */
2727*10465441SEvalZero 
2728*10465441SEvalZero /**
2729*10465441SEvalZero  * @defgroup lwip_opts_hooks Hooks
2730*10465441SEvalZero  * @ingroup lwip_opts_infrastructure
2731*10465441SEvalZero  * Hooks are undefined by default, define them to a function if you need them.
2732*10465441SEvalZero  * @{
2733*10465441SEvalZero  */
2734*10465441SEvalZero 
2735*10465441SEvalZero /**
2736*10465441SEvalZero  * LWIP_HOOK_FILENAME: Custom filename to \#include in files that provide hooks.
2737*10465441SEvalZero  * Declare your hook function prototypes in there, you may also \#include all headers
2738*10465441SEvalZero  * providing data types that are need in this file.
2739*10465441SEvalZero  */
2740*10465441SEvalZero #ifdef __DOXYGEN__
2741*10465441SEvalZero #define LWIP_HOOK_FILENAME "path/to/my/lwip_hooks.h"
2742*10465441SEvalZero #endif
2743*10465441SEvalZero 
2744*10465441SEvalZero /**
2745*10465441SEvalZero  * LWIP_HOOK_TCP_ISN:
2746*10465441SEvalZero  * Hook for generation of the Initial Sequence Number (ISN) for a new TCP
2747*10465441SEvalZero  * connection. The default lwIP ISN generation algorithm is very basic and may
2748*10465441SEvalZero  * allow for TCP spoofing attacks. This hook provides the means to implement
2749*10465441SEvalZero  * the standardized ISN generation algorithm from RFC 6528 (see contrib/adons/tcp_isn),
2750*10465441SEvalZero  * or any other desired algorithm as a replacement.
2751*10465441SEvalZero  * Called from tcp_connect() and tcp_listen_input() when an ISN is needed for
2752*10465441SEvalZero  * a new TCP connection, if TCP support (@ref LWIP_TCP) is enabled.\n
2753*10465441SEvalZero  * Signature:\code{.c}
2754*10465441SEvalZero  * u32_t my_hook_tcp_isn(const ip_addr_t* local_ip, u16_t local_port, const ip_addr_t* remote_ip, u16_t remote_port);
2755*10465441SEvalZero  * \endcode
2756*10465441SEvalZero  * - it may be necessary to use "struct ip_addr" (ip4_addr, ip6_addr) instead of "ip_addr_t" in function declarations\n
2757*10465441SEvalZero  * Arguments:
2758*10465441SEvalZero  * - local_ip: pointer to the local IP address of the connection
2759*10465441SEvalZero  * - local_port: local port number of the connection (host-byte order)
2760*10465441SEvalZero  * - remote_ip: pointer to the remote IP address of the connection
2761*10465441SEvalZero  * - remote_port: remote port number of the connection (host-byte order)\n
2762*10465441SEvalZero  * Return value:
2763*10465441SEvalZero  * - the 32-bit Initial Sequence Number to use for the new TCP connection.
2764*10465441SEvalZero  */
2765*10465441SEvalZero #ifdef __DOXYGEN__
2766*10465441SEvalZero #define LWIP_HOOK_TCP_ISN(local_ip, local_port, remote_ip, remote_port)
2767*10465441SEvalZero #endif
2768*10465441SEvalZero 
2769*10465441SEvalZero /**
2770*10465441SEvalZero  * LWIP_HOOK_TCP_INPACKET_PCB:
2771*10465441SEvalZero  * Hook for intercepting incoming packets before they are passed to a pcb. This
2772*10465441SEvalZero  * allows updating some state or even dropping a packet.
2773*10465441SEvalZero  * Signature:\code{.c}
2774*10465441SEvalZero  * err_t my_hook_tcp_inpkt(struct tcp_pcb *pcb, struct tcp_hdr *hdr, u16_t optlen, u16_t opt1len, u8_t *opt2, struct pbuf *p);
2775*10465441SEvalZero  * \endcode
2776*10465441SEvalZero  * Arguments:
2777*10465441SEvalZero  * - pcb: tcp_pcb selected for input of this packet (ATTENTION: this may be
2778*10465441SEvalZero  *        struct tcp_pcb_listen if pcb->state == LISTEN)
2779*10465441SEvalZero  * - hdr: pointer to tcp header (ATTENTION: tcp options may not be in one piece!)
2780*10465441SEvalZero  * - optlen: tcp option length
2781*10465441SEvalZero  * - opt1len: tcp option length 1st part
2782*10465441SEvalZero  * - opt2: if this is != NULL, tcp options are split among 2 pbufs. In that case,
2783*10465441SEvalZero  *         options start at right after the tcp header ('(u8_t*)(hdr + 1)') for
2784*10465441SEvalZero  *         the first 'opt1len' bytes and the rest starts at 'opt2'. opt2len can
2785*10465441SEvalZero  *         be simply calculated: 'opt2len = optlen - opt1len;'
2786*10465441SEvalZero  * - p: input packet, p->payload points to application data (that's why tcp hdr
2787*10465441SEvalZero  *      and options are passed in seperately)
2788*10465441SEvalZero  * Return value:
2789*10465441SEvalZero  * - ERR_OK: continue input of this packet as normal
2790*10465441SEvalZero  * - != ERR_OK: drop this packet for input (don't continue input processing)
2791*10465441SEvalZero  *
2792*10465441SEvalZero  * ATTENTION: don't call any tcp api functions that might change tcp state (pcb
2793*10465441SEvalZero  * state or any pcb lists) from this callback!
2794*10465441SEvalZero  */
2795*10465441SEvalZero #ifdef __DOXYGEN__
2796*10465441SEvalZero #define LWIP_HOOK_TCP_INPACKET_PCB(pcb, hdr, optlen, opt1len, opt2, p)
2797*10465441SEvalZero #endif
2798*10465441SEvalZero 
2799*10465441SEvalZero /**
2800*10465441SEvalZero  * LWIP_HOOK_TCP_OUT_TCPOPT_LENGTH:
2801*10465441SEvalZero  * Hook for increasing the size of the options allocated with a tcp header.
2802*10465441SEvalZero  * Together with LWIP_HOOK_TCP_OUT_ADD_TCPOPTS, this can be used to add custom
2803*10465441SEvalZero  * options to outgoing tcp segments.
2804*10465441SEvalZero  * Signature:\code{.c}
2805*10465441SEvalZero  * u8_t my_hook_tcp_out_tcpopt_length(const struct tcp_pcb *pcb, u8_t internal_option_length);
2806*10465441SEvalZero  * \endcode
2807*10465441SEvalZero  * Arguments:
2808*10465441SEvalZero  * - pcb: tcp_pcb that transmits (ATTENTION: this may be NULL or
2809*10465441SEvalZero  *        struct tcp_pcb_listen if pcb->state == LISTEN)
2810*10465441SEvalZero  * - internal_option_length: tcp option length used by the stack internally
2811*10465441SEvalZero  * Return value:
2812*10465441SEvalZero  * - a number of bytes to allocate for tcp options (internal_option_length <= ret <= 40)
2813*10465441SEvalZero  *
2814*10465441SEvalZero  * ATTENTION: don't call any tcp api functions that might change tcp state (pcb
2815*10465441SEvalZero  * state or any pcb lists) from this callback!
2816*10465441SEvalZero  */
2817*10465441SEvalZero #ifdef __DOXYGEN__
2818*10465441SEvalZero #define LWIP_HOOK_TCP_OUT_TCPOPT_LENGTH(pcb, internal_len)
2819*10465441SEvalZero #endif
2820*10465441SEvalZero 
2821*10465441SEvalZero /**
2822*10465441SEvalZero  * LWIP_HOOK_TCP_OUT_ADD_TCPOPTS:
2823*10465441SEvalZero  * Hook for adding custom options to outgoing tcp segments.
2824*10465441SEvalZero  * Space for these custom options has to be reserved via LWIP_HOOK_TCP_OUT_TCPOPT_LENGTH.
2825*10465441SEvalZero  * Signature:\code{.c}
2826*10465441SEvalZero  * u32_t *my_hook_tcp_out_add_tcpopts(struct pbuf *p, struct tcp_hdr *hdr, const struct tcp_pcb *pcb, u32_t *opts);
2827*10465441SEvalZero  * \endcode
2828*10465441SEvalZero  * Arguments:
2829*10465441SEvalZero  * - p: output packet, p->payload pointing to tcp header, data follows
2830*10465441SEvalZero  * - hdr: tcp header
2831*10465441SEvalZero  * - pcb: tcp_pcb that transmits (ATTENTION: this may be NULL or
2832*10465441SEvalZero  *        struct tcp_pcb_listen if pcb->state == LISTEN)
2833*10465441SEvalZero  * - opts: pointer where to add the custom options (there may already be options
2834*10465441SEvalZero  *         between the header and these)
2835*10465441SEvalZero  * Return value:
2836*10465441SEvalZero  * - pointer pointing directly after the inserted options
2837*10465441SEvalZero  *
2838*10465441SEvalZero  * ATTENTION: don't call any tcp api functions that might change tcp state (pcb
2839*10465441SEvalZero  * state or any pcb lists) from this callback!
2840*10465441SEvalZero  */
2841*10465441SEvalZero #ifdef __DOXYGEN__
2842*10465441SEvalZero #define LWIP_HOOK_TCP_OUT_ADD_TCPOPTS(p, hdr, pcb, opts)
2843*10465441SEvalZero #endif
2844*10465441SEvalZero 
2845*10465441SEvalZero /**
2846*10465441SEvalZero  * LWIP_HOOK_IP4_INPUT(pbuf, input_netif):
2847*10465441SEvalZero  * Called from ip_input() (IPv4)
2848*10465441SEvalZero  * Signature:\code{.c}
2849*10465441SEvalZero  *   int my_hook(struct pbuf *pbuf, struct netif *input_netif);
2850*10465441SEvalZero  * \endcode
2851*10465441SEvalZero  * Arguments:
2852*10465441SEvalZero  * - pbuf: received struct pbuf passed to ip_input()
2853*10465441SEvalZero  * - input_netif: struct netif on which the packet has been received
2854*10465441SEvalZero  * Return values:
2855*10465441SEvalZero  * - 0: Hook has not consumed the packet, packet is processed as normal
2856*10465441SEvalZero  * - != 0: Hook has consumed the packet.
2857*10465441SEvalZero  * If the hook consumed the packet, 'pbuf' is in the responsibility of the hook
2858*10465441SEvalZero  * (i.e. free it when done).
2859*10465441SEvalZero  */
2860*10465441SEvalZero #ifdef __DOXYGEN__
2861*10465441SEvalZero #define LWIP_HOOK_IP4_INPUT(pbuf, input_netif)
2862*10465441SEvalZero #endif
2863*10465441SEvalZero 
2864*10465441SEvalZero /**
2865*10465441SEvalZero  * LWIP_HOOK_IP4_ROUTE(dest):
2866*10465441SEvalZero  * Called from ip_route() (IPv4)
2867*10465441SEvalZero  * Signature:\code{.c}
2868*10465441SEvalZero  *   struct netif *my_hook(const ip4_addr_t *dest);
2869*10465441SEvalZero  * \endcode
2870*10465441SEvalZero  * Arguments:
2871*10465441SEvalZero  * - dest: destination IPv4 address
2872*10465441SEvalZero  * Returns values:
2873*10465441SEvalZero  * - the destination netif
2874*10465441SEvalZero  * - NULL if no destination netif is found. In that case, ip_route() continues as normal.
2875*10465441SEvalZero  */
2876*10465441SEvalZero #ifdef __DOXYGEN__
2877*10465441SEvalZero #define LWIP_HOOK_IP4_ROUTE()
2878*10465441SEvalZero #endif
2879*10465441SEvalZero 
2880*10465441SEvalZero /**
2881*10465441SEvalZero  * LWIP_HOOK_IP4_ROUTE_SRC(src, dest):
2882*10465441SEvalZero  * Source-based routing for IPv4 - called from ip_route() (IPv4)
2883*10465441SEvalZero  * Signature:\code{.c}
2884*10465441SEvalZero  *   struct netif *my_hook(const ip4_addr_t *src, const ip4_addr_t *dest);
2885*10465441SEvalZero  * \endcode
2886*10465441SEvalZero  * Arguments:
2887*10465441SEvalZero  * - src: local/source IPv4 address
2888*10465441SEvalZero  * - dest: destination IPv4 address
2889*10465441SEvalZero  * Returns values:
2890*10465441SEvalZero  * - the destination netif
2891*10465441SEvalZero  * - NULL if no destination netif is found. In that case, ip_route() continues as normal.
2892*10465441SEvalZero  */
2893*10465441SEvalZero #ifdef __DOXYGEN__
2894*10465441SEvalZero #define LWIP_HOOK_IP4_ROUTE_SRC(src, dest)
2895*10465441SEvalZero #endif
2896*10465441SEvalZero 
2897*10465441SEvalZero /**
2898*10465441SEvalZero  * LWIP_HOOK_IP4_CANFORWARD(src, dest):
2899*10465441SEvalZero  * Check if an IPv4 can be forwarded - called from:
2900*10465441SEvalZero  * ip4_input() -> ip4_forward() -> ip4_canforward() (IPv4)
2901*10465441SEvalZero  * - source address is available via ip4_current_src_addr()
2902*10465441SEvalZero  * - calling an output function in this context (e.g. multicast router) is allowed
2903*10465441SEvalZero  * Signature:\code{.c}
2904*10465441SEvalZero  *   int my_hook(struct pbuf *p, u32_t dest_addr_hostorder);
2905*10465441SEvalZero  * \endcode
2906*10465441SEvalZero  * Arguments:
2907*10465441SEvalZero  * - p: packet to forward
2908*10465441SEvalZero  * - dest: destination IPv4 address
2909*10465441SEvalZero  * Returns values:
2910*10465441SEvalZero  * - 1: forward
2911*10465441SEvalZero  * - 0: don't forward
2912*10465441SEvalZero  * - -1: no decision. In that case, ip4_canforward() continues as normal.
2913*10465441SEvalZero  */
2914*10465441SEvalZero #ifdef __DOXYGEN__
2915*10465441SEvalZero #define LWIP_HOOK_IP4_CANFORWARD(src, dest)
2916*10465441SEvalZero #endif
2917*10465441SEvalZero 
2918*10465441SEvalZero /**
2919*10465441SEvalZero  * LWIP_HOOK_ETHARP_GET_GW(netif, dest):
2920*10465441SEvalZero  * Called from etharp_output() (IPv4)
2921*10465441SEvalZero  * Signature:\code{.c}
2922*10465441SEvalZero  *   const ip4_addr_t *my_hook(struct netif *netif, const ip4_addr_t *dest);
2923*10465441SEvalZero  * \endcode
2924*10465441SEvalZero  * Arguments:
2925*10465441SEvalZero  * - netif: the netif used for sending
2926*10465441SEvalZero  * - dest: the destination IPv4 address
2927*10465441SEvalZero  * Return values:
2928*10465441SEvalZero  * - the IPv4 address of the gateway to handle the specified destination IPv4 address
2929*10465441SEvalZero  * - NULL, in which case the netif's default gateway is used
2930*10465441SEvalZero  *
2931*10465441SEvalZero  * The returned address MUST be directly reachable on the specified netif!
2932*10465441SEvalZero  * This function is meant to implement advanced IPv4 routing together with
2933*10465441SEvalZero  * LWIP_HOOK_IP4_ROUTE(). The actual routing/gateway table implementation is
2934*10465441SEvalZero  * not part of lwIP but can e.g. be hidden in the netif's state argument.
2935*10465441SEvalZero */
2936*10465441SEvalZero #ifdef __DOXYGEN__
2937*10465441SEvalZero #define LWIP_HOOK_ETHARP_GET_GW(netif, dest)
2938*10465441SEvalZero #endif
2939*10465441SEvalZero 
2940*10465441SEvalZero /**
2941*10465441SEvalZero  * LWIP_HOOK_IP6_INPUT(pbuf, input_netif):
2942*10465441SEvalZero  * Called from ip6_input() (IPv6)
2943*10465441SEvalZero  * Signature:\code{.c}
2944*10465441SEvalZero  *   int my_hook(struct pbuf *pbuf, struct netif *input_netif);
2945*10465441SEvalZero  * \endcode
2946*10465441SEvalZero  * Arguments:
2947*10465441SEvalZero  * - pbuf: received struct pbuf passed to ip6_input()
2948*10465441SEvalZero  * - input_netif: struct netif on which the packet has been received
2949*10465441SEvalZero  * Return values:
2950*10465441SEvalZero  * - 0: Hook has not consumed the packet, packet is processed as normal
2951*10465441SEvalZero  * - != 0: Hook has consumed the packet.
2952*10465441SEvalZero  * If the hook consumed the packet, 'pbuf' is in the responsibility of the hook
2953*10465441SEvalZero  * (i.e. free it when done).
2954*10465441SEvalZero  */
2955*10465441SEvalZero #ifdef __DOXYGEN__
2956*10465441SEvalZero #define LWIP_HOOK_IP6_INPUT(pbuf, input_netif)
2957*10465441SEvalZero #endif
2958*10465441SEvalZero 
2959*10465441SEvalZero /**
2960*10465441SEvalZero  * LWIP_HOOK_IP6_ROUTE(src, dest):
2961*10465441SEvalZero  * Called from ip_route() (IPv6)
2962*10465441SEvalZero  * Signature:\code{.c}
2963*10465441SEvalZero  *   struct netif *my_hook(const ip6_addr_t *dest, const ip6_addr_t *src);
2964*10465441SEvalZero  * \endcode
2965*10465441SEvalZero  * Arguments:
2966*10465441SEvalZero  * - src: source IPv6 address
2967*10465441SEvalZero  * - dest: destination IPv6 address
2968*10465441SEvalZero  * Return values:
2969*10465441SEvalZero  * - the destination netif
2970*10465441SEvalZero  * - NULL if no destination netif is found. In that case, ip6_route() continues as normal.
2971*10465441SEvalZero  */
2972*10465441SEvalZero #ifdef __DOXYGEN__
2973*10465441SEvalZero #define LWIP_HOOK_IP6_ROUTE(src, dest)
2974*10465441SEvalZero #endif
2975*10465441SEvalZero 
2976*10465441SEvalZero /**
2977*10465441SEvalZero  * LWIP_HOOK_ND6_GET_GW(netif, dest):
2978*10465441SEvalZero  * Called from nd6_get_next_hop_entry() (IPv6)
2979*10465441SEvalZero  * Signature:\code{.c}
2980*10465441SEvalZero  *   const ip6_addr_t *my_hook(struct netif *netif, const ip6_addr_t *dest);
2981*10465441SEvalZero  * \endcode
2982*10465441SEvalZero  * Arguments:
2983*10465441SEvalZero  * - netif: the netif used for sending
2984*10465441SEvalZero  * - dest: the destination IPv6 address
2985*10465441SEvalZero  * Return values:
2986*10465441SEvalZero  * - the IPv6 address of the next hop to handle the specified destination IPv6 address
2987*10465441SEvalZero  * - NULL, in which case a NDP-discovered router is used instead
2988*10465441SEvalZero  *
2989*10465441SEvalZero  * The returned address MUST be directly reachable on the specified netif!
2990*10465441SEvalZero  * This function is meant to implement advanced IPv6 routing together with
2991*10465441SEvalZero  * LWIP_HOOK_IP6_ROUTE(). The actual routing/gateway table implementation is
2992*10465441SEvalZero  * not part of lwIP but can e.g. be hidden in the netif's state argument.
2993*10465441SEvalZero */
2994*10465441SEvalZero #ifdef __DOXYGEN__
2995*10465441SEvalZero #define LWIP_HOOK_ND6_GET_GW(netif, dest)
2996*10465441SEvalZero #endif
2997*10465441SEvalZero 
2998*10465441SEvalZero /**
2999*10465441SEvalZero  * LWIP_HOOK_VLAN_CHECK(netif, eth_hdr, vlan_hdr):
3000*10465441SEvalZero  * Called from ethernet_input() if VLAN support is enabled
3001*10465441SEvalZero  * Signature:\code{.c}
3002*10465441SEvalZero  *   int my_hook(struct netif *netif, struct eth_hdr *eth_hdr, struct eth_vlan_hdr *vlan_hdr);
3003*10465441SEvalZero  * \endcode
3004*10465441SEvalZero  * Arguments:
3005*10465441SEvalZero  * - netif: struct netif on which the packet has been received
3006*10465441SEvalZero  * - eth_hdr: struct eth_hdr of the packet
3007*10465441SEvalZero  * - vlan_hdr: struct eth_vlan_hdr of the packet
3008*10465441SEvalZero  * Return values:
3009*10465441SEvalZero  * - 0: Packet must be dropped.
3010*10465441SEvalZero  * - != 0: Packet must be accepted.
3011*10465441SEvalZero  */
3012*10465441SEvalZero #ifdef __DOXYGEN__
3013*10465441SEvalZero #define LWIP_HOOK_VLAN_CHECK(netif, eth_hdr, vlan_hdr)
3014*10465441SEvalZero #endif
3015*10465441SEvalZero 
3016*10465441SEvalZero /**
3017*10465441SEvalZero  * LWIP_HOOK_VLAN_SET:
3018*10465441SEvalZero  * Hook can be used to set prio_vid field of vlan_hdr. If you need to store data
3019*10465441SEvalZero  * on per-netif basis to implement this callback, see @ref netif_cd.
3020*10465441SEvalZero  * Called from ethernet_output() if VLAN support (@ref ETHARP_SUPPORT_VLAN) is enabled.\n
3021*10465441SEvalZero  * Signature:\code{.c}
3022*10465441SEvalZero  *   s32_t my_hook_vlan_set(struct netif* netif, struct pbuf* pbuf, const struct eth_addr* src, const struct eth_addr* dst, u16_t eth_type);\n
3023*10465441SEvalZero  * \endcode
3024*10465441SEvalZero  * Arguments:
3025*10465441SEvalZero  * - netif: struct netif that the packet will be sent through
3026*10465441SEvalZero  * - p: struct pbuf packet to be sent
3027*10465441SEvalZero  * - src: source eth address
3028*10465441SEvalZero  * - dst: destination eth address
3029*10465441SEvalZero  * - eth_type: ethernet type to packet to be sent\n
3030*10465441SEvalZero  *
3031*10465441SEvalZero  *
3032*10465441SEvalZero  * Return values:
3033*10465441SEvalZero  * - &lt;0: Packet shall not contain VLAN header.
3034*10465441SEvalZero  * - 0 &lt;= return value &lt;= 0xFFFF: Packet shall contain VLAN header. Return value is prio_vid in host byte order.
3035*10465441SEvalZero  */
3036*10465441SEvalZero #ifdef __DOXYGEN__
3037*10465441SEvalZero #define LWIP_HOOK_VLAN_SET(netif, p, src, dst, eth_type)
3038*10465441SEvalZero #endif
3039*10465441SEvalZero 
3040*10465441SEvalZero /**
3041*10465441SEvalZero  * LWIP_HOOK_MEMP_AVAILABLE(memp_t_type):
3042*10465441SEvalZero  * Called from memp_free() when a memp pool was empty and an item is now available
3043*10465441SEvalZero  * Signature:\code{.c}
3044*10465441SEvalZero  *   void my_hook(memp_t type);
3045*10465441SEvalZero  * \endcode
3046*10465441SEvalZero  */
3047*10465441SEvalZero #ifdef __DOXYGEN__
3048*10465441SEvalZero #define LWIP_HOOK_MEMP_AVAILABLE(memp_t_type)
3049*10465441SEvalZero #endif
3050*10465441SEvalZero 
3051*10465441SEvalZero /**
3052*10465441SEvalZero  * LWIP_HOOK_UNKNOWN_ETH_PROTOCOL(pbuf, netif):
3053*10465441SEvalZero  * Called from ethernet_input() when an unknown eth type is encountered.
3054*10465441SEvalZero  * Signature:\code{.c}
3055*10465441SEvalZero  *   err_t my_hook(struct pbuf* pbuf, struct netif* netif);
3056*10465441SEvalZero  * \endcode
3057*10465441SEvalZero  * Arguments:
3058*10465441SEvalZero  * - p: rx packet with unknown eth type
3059*10465441SEvalZero  * - netif: netif on which the packet has been received
3060*10465441SEvalZero  * Return values:
3061*10465441SEvalZero  * - ERR_OK if packet is accepted (hook function now owns the pbuf)
3062*10465441SEvalZero  * - any error code otherwise (pbuf is freed)
3063*10465441SEvalZero  *
3064*10465441SEvalZero  * Payload points to ethernet header!
3065*10465441SEvalZero  */
3066*10465441SEvalZero #ifdef __DOXYGEN__
3067*10465441SEvalZero #define LWIP_HOOK_UNKNOWN_ETH_PROTOCOL(pbuf, netif)
3068*10465441SEvalZero #endif
3069*10465441SEvalZero 
3070*10465441SEvalZero /**
3071*10465441SEvalZero  * LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, state, msg, msg_type, options_len_ptr):
3072*10465441SEvalZero  * Called from various dhcp functions when sending a DHCP message.
3073*10465441SEvalZero  * This hook is called just before the DHCP message trailer is added, so the
3074*10465441SEvalZero  * options are at the end of a DHCP message.
3075*10465441SEvalZero  * Signature:\code{.c}
3076*10465441SEvalZero  *   void my_hook(struct netif *netif, struct dhcp *dhcp, u8_t state, struct dhcp_msg *msg,
3077*10465441SEvalZero  *                u8_t msg_type, u16_t *options_len_ptr);
3078*10465441SEvalZero  * \endcode
3079*10465441SEvalZero  * Arguments:
3080*10465441SEvalZero  * - netif: struct netif that the packet will be sent through
3081*10465441SEvalZero  * - dhcp: struct dhcp on that netif
3082*10465441SEvalZero  * - state: current dhcp state (dhcp_state_enum_t as an u8_t)
3083*10465441SEvalZero  * - msg: struct dhcp_msg that will be sent
3084*10465441SEvalZero  * - msg_type: dhcp message type to be sent (u8_t)
3085*10465441SEvalZero  * - options_len_ptr: pointer to the current length of options in the dhcp_msg "msg"
3086*10465441SEvalZero  *                    (must be increased when options are added!)
3087*10465441SEvalZero  *
3088*10465441SEvalZero  * Options need to appended like this:
3089*10465441SEvalZero  *   LWIP_ASSERT("dhcp option overflow", *options_len_ptr + option_len + 2 <= DHCP_OPTIONS_LEN);
3090*10465441SEvalZero  *   msg->options[(*options_len_ptr)++] = &lt;option_number&gt;;
3091*10465441SEvalZero  *   msg->options[(*options_len_ptr)++] = &lt;option_len&gt;;
3092*10465441SEvalZero  *   msg->options[(*options_len_ptr)++] = &lt;option_bytes&gt;;
3093*10465441SEvalZero  *   [...]
3094*10465441SEvalZero  */
3095*10465441SEvalZero #ifdef __DOXYGEN__
3096*10465441SEvalZero #define LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, state, msg, msg_type, options_len_ptr)
3097*10465441SEvalZero #endif
3098*10465441SEvalZero 
3099*10465441SEvalZero /**
3100*10465441SEvalZero  * LWIP_HOOK_DHCP_PARSE_OPTION(netif, dhcp, state, msg, msg_type, option, len, pbuf, option_value_offset):
3101*10465441SEvalZero  * Called from dhcp_parse_reply when receiving a DHCP message.
3102*10465441SEvalZero  * This hook is called for every option in the received message that is not handled internally.
3103*10465441SEvalZero  * Signature:\code{.c}
3104*10465441SEvalZero  *   void my_hook(struct netif *netif, struct dhcp *dhcp, u8_t state, struct dhcp_msg *msg,
3105*10465441SEvalZero  *                u8_t msg_type, u8_t option, u8_t option_len, struct pbuf *pbuf, u16_t option_value_offset);
3106*10465441SEvalZero  * \endcode
3107*10465441SEvalZero  * Arguments:
3108*10465441SEvalZero  * - netif: struct netif that the packet will be sent through
3109*10465441SEvalZero  * - dhcp: struct dhcp on that netif
3110*10465441SEvalZero  * - state: current dhcp state (dhcp_state_enum_t as an u8_t)
3111*10465441SEvalZero  * - msg: struct dhcp_msg that was received
3112*10465441SEvalZero  * - msg_type: dhcp message type received (u8_t, ATTENTION: only valid after
3113*10465441SEvalZero  *             the message type option has been parsed!)
3114*10465441SEvalZero  * - option: option value (u8_t)
3115*10465441SEvalZero  * - len: option data length (u8_t)
3116*10465441SEvalZero  * - pbuf: pbuf where option data is contained
3117*10465441SEvalZero  * - option_value_offset: offset in pbuf where option data begins
3118*10465441SEvalZero  *
3119*10465441SEvalZero  * A nice way to get the option contents is pbuf_get_contiguous():
3120*10465441SEvalZero  *  u8_t buf[32];
3121*10465441SEvalZero  *  u8_t *ptr = (u8_t*)pbuf_get_contiguous(p, buf, sizeof(buf), LWIP_MIN(option_len, sizeof(buf)), offset);
3122*10465441SEvalZero  */
3123*10465441SEvalZero #ifdef __DOXYGEN__
3124*10465441SEvalZero #define LWIP_HOOK_DHCP_PARSE_OPTION(netif, dhcp, state, msg, msg_type, option, len, pbuf, offset)
3125*10465441SEvalZero #endif
3126*10465441SEvalZero 
3127*10465441SEvalZero /**
3128*10465441SEvalZero  * LWIP_HOOK_DHCP6_APPEND_OPTIONS(netif, dhcp6, state, msg, msg_type, options_len_ptr, max_len):
3129*10465441SEvalZero  * Called from various dhcp6 functions when sending a DHCP6 message.
3130*10465441SEvalZero  * This hook is called just before the DHCP6 message is sent, so the
3131*10465441SEvalZero  * options are at the end of a DHCP6 message.
3132*10465441SEvalZero  * Signature:\code{.c}
3133*10465441SEvalZero  *   void my_hook(struct netif *netif, struct dhcp6 *dhcp, u8_t state, struct dhcp6_msg *msg,
3134*10465441SEvalZero  *                u8_t msg_type, u16_t *options_len_ptr);
3135*10465441SEvalZero  * \endcode
3136*10465441SEvalZero  * Arguments:
3137*10465441SEvalZero  * - netif: struct netif that the packet will be sent through
3138*10465441SEvalZero  * - dhcp6: struct dhcp6 on that netif
3139*10465441SEvalZero  * - state: current dhcp6 state (dhcp6_state_enum_t as an u8_t)
3140*10465441SEvalZero  * - msg: struct dhcp6_msg that will be sent
3141*10465441SEvalZero  * - msg_type: dhcp6 message type to be sent (u8_t)
3142*10465441SEvalZero  * - options_len_ptr: pointer to the current length of options in the dhcp6_msg "msg"
3143*10465441SEvalZero  *                    (must be increased when options are added!)
3144*10465441SEvalZero  *
3145*10465441SEvalZero  * Options need to appended like this:
3146*10465441SEvalZero  *   u8_t *options = (u8_t *)(msg + 1);
3147*10465441SEvalZero  *   LWIP_ASSERT("dhcp option overflow", sizeof(struct dhcp6_msg) + *options_len_ptr + newoptlen <= max_len);
3148*10465441SEvalZero  *   options[(*options_len_ptr)++] = &lt;option_data&gt;;
3149*10465441SEvalZero  *   [...]
3150*10465441SEvalZero  */
3151*10465441SEvalZero #ifdef __DOXYGEN__
3152*10465441SEvalZero #define LWIP_HOOK_DHCP6_APPEND_OPTIONS(netif, dhcp6, state, msg, msg_type, options_len_ptr, max_len)
3153*10465441SEvalZero #endif
3154*10465441SEvalZero 
3155*10465441SEvalZero /**
3156*10465441SEvalZero  * LWIP_HOOK_SOCKETS_SETSOCKOPT(s, sock, level, optname, optval, optlen, err)
3157*10465441SEvalZero  * Called from socket API to implement setsockopt() for options not provided by lwIP.
3158*10465441SEvalZero  * Core lock is held when this hook is called.
3159*10465441SEvalZero  * Signature:\code{.c}
3160*10465441SEvalZero  *   int my_hook(int s, struct lwip_sock *sock, int level, int optname, const void *optval, socklen_t optlen, int *err)
3161*10465441SEvalZero  * \endcode
3162*10465441SEvalZero  * Arguments:
3163*10465441SEvalZero  * - s: socket file descriptor
3164*10465441SEvalZero  * - sock: internal socket descriptor (see lwip/priv/sockets_priv.h)
3165*10465441SEvalZero  * - level: protocol level at which the option resides
3166*10465441SEvalZero  * - optname: option to set
3167*10465441SEvalZero  * - optval: value to set
3168*10465441SEvalZero  * - optlen: size of optval
3169*10465441SEvalZero  * - err: output error
3170*10465441SEvalZero  * Return values:
3171*10465441SEvalZero  * - 0: Hook has not consumed the option, code continues as normal (to internal options)
3172*10465441SEvalZero  * - != 0: Hook has consumed the option, 'err' is returned
3173*10465441SEvalZero  */
3174*10465441SEvalZero #ifdef __DOXYGEN__
3175*10465441SEvalZero #define LWIP_HOOK_SOCKETS_SETSOCKOPT(s, sock, level, optname, optval, optlen, err)
3176*10465441SEvalZero #endif
3177*10465441SEvalZero 
3178*10465441SEvalZero /**
3179*10465441SEvalZero  * LWIP_HOOK_SOCKETS_GETSOCKOPT(s, sock, level, optname, optval, optlen, err)
3180*10465441SEvalZero  * Called from socket API to implement getsockopt() for options not provided by lwIP.
3181*10465441SEvalZero  * Core lock is held when this hook is called.
3182*10465441SEvalZero  * Signature:\code{.c}
3183*10465441SEvalZero  *   int my_hook(int s, struct lwip_sock *sock, int level, int optname, void *optval, socklen_t *optlen, int *err)
3184*10465441SEvalZero  * \endcode
3185*10465441SEvalZero  * Arguments:
3186*10465441SEvalZero  * - s: socket file descriptor
3187*10465441SEvalZero  * - sock: internal socket descriptor (see lwip/priv/sockets_priv.h)
3188*10465441SEvalZero  * - level: protocol level at which the option resides
3189*10465441SEvalZero  * - optname: option to get
3190*10465441SEvalZero  * - optval: value to get
3191*10465441SEvalZero  * - optlen: size of optval
3192*10465441SEvalZero  * - err: output error
3193*10465441SEvalZero  * Return values:
3194*10465441SEvalZero  * - 0: Hook has not consumed the option, code continues as normal (to internal options)
3195*10465441SEvalZero  * - != 0: Hook has consumed the option, 'err' is returned
3196*10465441SEvalZero  */
3197*10465441SEvalZero #ifdef __DOXYGEN__
3198*10465441SEvalZero #define LWIP_HOOK_SOCKETS_GETSOCKOPT(s, sock, level, optname, optval, optlen, err)
3199*10465441SEvalZero #endif
3200*10465441SEvalZero 
3201*10465441SEvalZero /**
3202*10465441SEvalZero  * LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE(name, addr, addrtype, err)
3203*10465441SEvalZero  * Called from netconn APIs (not usable with callback apps) allowing an
3204*10465441SEvalZero  * external DNS resolver (which uses sequential API) to handle the query.
3205*10465441SEvalZero  * Signature:\code{.c}
3206*10465441SEvalZero  *   int my_hook(const char *name, ip_addr_t *addr, u8_t addrtype, err_t *err)
3207*10465441SEvalZero  * \endcode
3208*10465441SEvalZero  * Arguments:
3209*10465441SEvalZero  * - name: hostname to resolve
3210*10465441SEvalZero  * - addr: output host address
3211*10465441SEvalZero  * - addrtype: type of address to query
3212*10465441SEvalZero  * - err: output error
3213*10465441SEvalZero  * Return values:
3214*10465441SEvalZero  * - 0: Hook has not consumed hostname query, query continues into DNS module
3215*10465441SEvalZero  * - != 0: Hook has consumed the query
3216*10465441SEvalZero  *
3217*10465441SEvalZero  * err must also be checked to determine if the hook consumed the query, but
3218*10465441SEvalZero  * the query failed
3219*10465441SEvalZero  */
3220*10465441SEvalZero #ifdef __DOXYGEN__
3221*10465441SEvalZero #define LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE(name, addr, addrtype, err)
3222*10465441SEvalZero #endif
3223*10465441SEvalZero /**
3224*10465441SEvalZero  * @}
3225*10465441SEvalZero  */
3226*10465441SEvalZero 
3227*10465441SEvalZero /*
3228*10465441SEvalZero    ---------------------------------------
3229*10465441SEvalZero    ---------- Debugging options ----------
3230*10465441SEvalZero    ---------------------------------------
3231*10465441SEvalZero */
3232*10465441SEvalZero /**
3233*10465441SEvalZero  * @defgroup lwip_opts_debugmsg Debug messages
3234*10465441SEvalZero  * @ingroup lwip_opts_debug
3235*10465441SEvalZero  * @{
3236*10465441SEvalZero  */
3237*10465441SEvalZero /**
3238*10465441SEvalZero  * LWIP_DBG_MIN_LEVEL: After masking, the value of the debug is
3239*10465441SEvalZero  * compared against this value. If it is smaller, then debugging
3240*10465441SEvalZero  * messages are written.
3241*10465441SEvalZero  * @see debugging_levels
3242*10465441SEvalZero  */
3243*10465441SEvalZero #if !defined LWIP_DBG_MIN_LEVEL || defined __DOXYGEN__
3244*10465441SEvalZero #define LWIP_DBG_MIN_LEVEL              LWIP_DBG_LEVEL_ALL
3245*10465441SEvalZero #endif
3246*10465441SEvalZero 
3247*10465441SEvalZero /**
3248*10465441SEvalZero  * LWIP_DBG_TYPES_ON: A mask that can be used to globally enable/disable
3249*10465441SEvalZero  * debug messages of certain types.
3250*10465441SEvalZero  * @see debugging_levels
3251*10465441SEvalZero  */
3252*10465441SEvalZero #if !defined LWIP_DBG_TYPES_ON || defined __DOXYGEN__
3253*10465441SEvalZero #define LWIP_DBG_TYPES_ON               LWIP_DBG_ON
3254*10465441SEvalZero #endif
3255*10465441SEvalZero 
3256*10465441SEvalZero /**
3257*10465441SEvalZero  * ETHARP_DEBUG: Enable debugging in etharp.c.
3258*10465441SEvalZero  */
3259*10465441SEvalZero #if !defined ETHARP_DEBUG || defined __DOXYGEN__
3260*10465441SEvalZero #define ETHARP_DEBUG                    LWIP_DBG_OFF
3261*10465441SEvalZero #endif
3262*10465441SEvalZero 
3263*10465441SEvalZero /**
3264*10465441SEvalZero  * NETIF_DEBUG: Enable debugging in netif.c.
3265*10465441SEvalZero  */
3266*10465441SEvalZero #if !defined NETIF_DEBUG || defined __DOXYGEN__
3267*10465441SEvalZero #define NETIF_DEBUG                     LWIP_DBG_OFF
3268*10465441SEvalZero #endif
3269*10465441SEvalZero 
3270*10465441SEvalZero /**
3271*10465441SEvalZero  * PBUF_DEBUG: Enable debugging in pbuf.c.
3272*10465441SEvalZero  */
3273*10465441SEvalZero #if !defined PBUF_DEBUG || defined __DOXYGEN__
3274*10465441SEvalZero #define PBUF_DEBUG                      LWIP_DBG_OFF
3275*10465441SEvalZero #endif
3276*10465441SEvalZero 
3277*10465441SEvalZero /**
3278*10465441SEvalZero  * API_LIB_DEBUG: Enable debugging in api_lib.c.
3279*10465441SEvalZero  */
3280*10465441SEvalZero #if !defined API_LIB_DEBUG || defined __DOXYGEN__
3281*10465441SEvalZero #define API_LIB_DEBUG                   LWIP_DBG_OFF
3282*10465441SEvalZero #endif
3283*10465441SEvalZero 
3284*10465441SEvalZero /**
3285*10465441SEvalZero  * API_MSG_DEBUG: Enable debugging in api_msg.c.
3286*10465441SEvalZero  */
3287*10465441SEvalZero #if !defined API_MSG_DEBUG || defined __DOXYGEN__
3288*10465441SEvalZero #define API_MSG_DEBUG                   LWIP_DBG_OFF
3289*10465441SEvalZero #endif
3290*10465441SEvalZero 
3291*10465441SEvalZero /**
3292*10465441SEvalZero  * SOCKETS_DEBUG: Enable debugging in sockets.c.
3293*10465441SEvalZero  */
3294*10465441SEvalZero #if !defined SOCKETS_DEBUG || defined __DOXYGEN__
3295*10465441SEvalZero #define SOCKETS_DEBUG                   LWIP_DBG_OFF
3296*10465441SEvalZero #endif
3297*10465441SEvalZero 
3298*10465441SEvalZero /**
3299*10465441SEvalZero  * ICMP_DEBUG: Enable debugging in icmp.c.
3300*10465441SEvalZero  */
3301*10465441SEvalZero #if !defined ICMP_DEBUG || defined __DOXYGEN__
3302*10465441SEvalZero #define ICMP_DEBUG                      LWIP_DBG_OFF
3303*10465441SEvalZero #endif
3304*10465441SEvalZero 
3305*10465441SEvalZero /**
3306*10465441SEvalZero  * IGMP_DEBUG: Enable debugging in igmp.c.
3307*10465441SEvalZero  */
3308*10465441SEvalZero #if !defined IGMP_DEBUG || defined __DOXYGEN__
3309*10465441SEvalZero #define IGMP_DEBUG                      LWIP_DBG_OFF
3310*10465441SEvalZero #endif
3311*10465441SEvalZero 
3312*10465441SEvalZero /**
3313*10465441SEvalZero  * INET_DEBUG: Enable debugging in inet.c.
3314*10465441SEvalZero  */
3315*10465441SEvalZero #if !defined INET_DEBUG || defined __DOXYGEN__
3316*10465441SEvalZero #define INET_DEBUG                      LWIP_DBG_OFF
3317*10465441SEvalZero #endif
3318*10465441SEvalZero 
3319*10465441SEvalZero /**
3320*10465441SEvalZero  * IP_DEBUG: Enable debugging for IP.
3321*10465441SEvalZero  */
3322*10465441SEvalZero #if !defined IP_DEBUG || defined __DOXYGEN__
3323*10465441SEvalZero #define IP_DEBUG                        LWIP_DBG_OFF
3324*10465441SEvalZero #endif
3325*10465441SEvalZero 
3326*10465441SEvalZero /**
3327*10465441SEvalZero  * IP_REASS_DEBUG: Enable debugging in ip_frag.c for both frag & reass.
3328*10465441SEvalZero  */
3329*10465441SEvalZero #if !defined IP_REASS_DEBUG || defined __DOXYGEN__
3330*10465441SEvalZero #define IP_REASS_DEBUG                  LWIP_DBG_OFF
3331*10465441SEvalZero #endif
3332*10465441SEvalZero 
3333*10465441SEvalZero /**
3334*10465441SEvalZero  * RAW_DEBUG: Enable debugging in raw.c.
3335*10465441SEvalZero  */
3336*10465441SEvalZero #if !defined RAW_DEBUG || defined __DOXYGEN__
3337*10465441SEvalZero #define RAW_DEBUG                       LWIP_DBG_OFF
3338*10465441SEvalZero #endif
3339*10465441SEvalZero 
3340*10465441SEvalZero /**
3341*10465441SEvalZero  * MEM_DEBUG: Enable debugging in mem.c.
3342*10465441SEvalZero  */
3343*10465441SEvalZero #if !defined MEM_DEBUG || defined __DOXYGEN__
3344*10465441SEvalZero #define MEM_DEBUG                       LWIP_DBG_OFF
3345*10465441SEvalZero #endif
3346*10465441SEvalZero 
3347*10465441SEvalZero /**
3348*10465441SEvalZero  * MEMP_DEBUG: Enable debugging in memp.c.
3349*10465441SEvalZero  */
3350*10465441SEvalZero #if !defined MEMP_DEBUG || defined __DOXYGEN__
3351*10465441SEvalZero #define MEMP_DEBUG                      LWIP_DBG_OFF
3352*10465441SEvalZero #endif
3353*10465441SEvalZero 
3354*10465441SEvalZero /**
3355*10465441SEvalZero  * SYS_DEBUG: Enable debugging in sys.c.
3356*10465441SEvalZero  */
3357*10465441SEvalZero #if !defined SYS_DEBUG || defined __DOXYGEN__
3358*10465441SEvalZero #define SYS_DEBUG                       LWIP_DBG_OFF
3359*10465441SEvalZero #endif
3360*10465441SEvalZero 
3361*10465441SEvalZero /**
3362*10465441SEvalZero  * TIMERS_DEBUG: Enable debugging in timers.c.
3363*10465441SEvalZero  */
3364*10465441SEvalZero #if !defined TIMERS_DEBUG || defined __DOXYGEN__
3365*10465441SEvalZero #define TIMERS_DEBUG                    LWIP_DBG_OFF
3366*10465441SEvalZero #endif
3367*10465441SEvalZero 
3368*10465441SEvalZero /**
3369*10465441SEvalZero  * TCP_DEBUG: Enable debugging for TCP.
3370*10465441SEvalZero  */
3371*10465441SEvalZero #if !defined TCP_DEBUG || defined __DOXYGEN__
3372*10465441SEvalZero #define TCP_DEBUG                       LWIP_DBG_OFF
3373*10465441SEvalZero #endif
3374*10465441SEvalZero 
3375*10465441SEvalZero /**
3376*10465441SEvalZero  * TCP_INPUT_DEBUG: Enable debugging in tcp_in.c for incoming debug.
3377*10465441SEvalZero  */
3378*10465441SEvalZero #if !defined TCP_INPUT_DEBUG || defined __DOXYGEN__
3379*10465441SEvalZero #define TCP_INPUT_DEBUG                 LWIP_DBG_OFF
3380*10465441SEvalZero #endif
3381*10465441SEvalZero 
3382*10465441SEvalZero /**
3383*10465441SEvalZero  * TCP_FR_DEBUG: Enable debugging in tcp_in.c for fast retransmit.
3384*10465441SEvalZero  */
3385*10465441SEvalZero #if !defined TCP_FR_DEBUG || defined __DOXYGEN__
3386*10465441SEvalZero #define TCP_FR_DEBUG                    LWIP_DBG_OFF
3387*10465441SEvalZero #endif
3388*10465441SEvalZero 
3389*10465441SEvalZero /**
3390*10465441SEvalZero  * TCP_RTO_DEBUG: Enable debugging in TCP for retransmit
3391*10465441SEvalZero  * timeout.
3392*10465441SEvalZero  */
3393*10465441SEvalZero #if !defined TCP_RTO_DEBUG || defined __DOXYGEN__
3394*10465441SEvalZero #define TCP_RTO_DEBUG                   LWIP_DBG_OFF
3395*10465441SEvalZero #endif
3396*10465441SEvalZero 
3397*10465441SEvalZero /**
3398*10465441SEvalZero  * TCP_CWND_DEBUG: Enable debugging for TCP congestion window.
3399*10465441SEvalZero  */
3400*10465441SEvalZero #if !defined TCP_CWND_DEBUG || defined __DOXYGEN__
3401*10465441SEvalZero #define TCP_CWND_DEBUG                  LWIP_DBG_OFF
3402*10465441SEvalZero #endif
3403*10465441SEvalZero 
3404*10465441SEvalZero /**
3405*10465441SEvalZero  * TCP_WND_DEBUG: Enable debugging in tcp_in.c for window updating.
3406*10465441SEvalZero  */
3407*10465441SEvalZero #if !defined TCP_WND_DEBUG || defined __DOXYGEN__
3408*10465441SEvalZero #define TCP_WND_DEBUG                   LWIP_DBG_OFF
3409*10465441SEvalZero #endif
3410*10465441SEvalZero 
3411*10465441SEvalZero /**
3412*10465441SEvalZero  * TCP_OUTPUT_DEBUG: Enable debugging in tcp_out.c output functions.
3413*10465441SEvalZero  */
3414*10465441SEvalZero #if !defined TCP_OUTPUT_DEBUG || defined __DOXYGEN__
3415*10465441SEvalZero #define TCP_OUTPUT_DEBUG                LWIP_DBG_OFF
3416*10465441SEvalZero #endif
3417*10465441SEvalZero 
3418*10465441SEvalZero /**
3419*10465441SEvalZero  * TCP_RST_DEBUG: Enable debugging for TCP with the RST message.
3420*10465441SEvalZero  */
3421*10465441SEvalZero #if !defined TCP_RST_DEBUG || defined __DOXYGEN__
3422*10465441SEvalZero #define TCP_RST_DEBUG                   LWIP_DBG_OFF
3423*10465441SEvalZero #endif
3424*10465441SEvalZero 
3425*10465441SEvalZero /**
3426*10465441SEvalZero  * TCP_QLEN_DEBUG: Enable debugging for TCP queue lengths.
3427*10465441SEvalZero  */
3428*10465441SEvalZero #if !defined TCP_QLEN_DEBUG || defined __DOXYGEN__
3429*10465441SEvalZero #define TCP_QLEN_DEBUG                  LWIP_DBG_OFF
3430*10465441SEvalZero #endif
3431*10465441SEvalZero 
3432*10465441SEvalZero /**
3433*10465441SEvalZero  * UDP_DEBUG: Enable debugging in UDP.
3434*10465441SEvalZero  */
3435*10465441SEvalZero #if !defined UDP_DEBUG || defined __DOXYGEN__
3436*10465441SEvalZero #define UDP_DEBUG                       LWIP_DBG_OFF
3437*10465441SEvalZero #endif
3438*10465441SEvalZero 
3439*10465441SEvalZero /**
3440*10465441SEvalZero  * TCPIP_DEBUG: Enable debugging in tcpip.c.
3441*10465441SEvalZero  */
3442*10465441SEvalZero #if !defined TCPIP_DEBUG || defined __DOXYGEN__
3443*10465441SEvalZero #define TCPIP_DEBUG                     LWIP_DBG_OFF
3444*10465441SEvalZero #endif
3445*10465441SEvalZero 
3446*10465441SEvalZero /**
3447*10465441SEvalZero  * SLIP_DEBUG: Enable debugging in slipif.c.
3448*10465441SEvalZero  */
3449*10465441SEvalZero #if !defined SLIP_DEBUG || defined __DOXYGEN__
3450*10465441SEvalZero #define SLIP_DEBUG                      LWIP_DBG_OFF
3451*10465441SEvalZero #endif
3452*10465441SEvalZero 
3453*10465441SEvalZero /**
3454*10465441SEvalZero  * DHCP_DEBUG: Enable debugging in dhcp.c.
3455*10465441SEvalZero  */
3456*10465441SEvalZero #if !defined DHCP_DEBUG || defined __DOXYGEN__
3457*10465441SEvalZero #define DHCP_DEBUG                      LWIP_DBG_OFF
3458*10465441SEvalZero #endif
3459*10465441SEvalZero 
3460*10465441SEvalZero /**
3461*10465441SEvalZero  * AUTOIP_DEBUG: Enable debugging in autoip.c.
3462*10465441SEvalZero  */
3463*10465441SEvalZero #if !defined AUTOIP_DEBUG || defined __DOXYGEN__
3464*10465441SEvalZero #define AUTOIP_DEBUG                    LWIP_DBG_OFF
3465*10465441SEvalZero #endif
3466*10465441SEvalZero 
3467*10465441SEvalZero /**
3468*10465441SEvalZero  * DNS_DEBUG: Enable debugging for DNS.
3469*10465441SEvalZero  */
3470*10465441SEvalZero #if !defined DNS_DEBUG || defined __DOXYGEN__
3471*10465441SEvalZero #define DNS_DEBUG                       LWIP_DBG_OFF
3472*10465441SEvalZero #endif
3473*10465441SEvalZero 
3474*10465441SEvalZero /**
3475*10465441SEvalZero  * IP6_DEBUG: Enable debugging for IPv6.
3476*10465441SEvalZero  */
3477*10465441SEvalZero #if !defined IP6_DEBUG || defined __DOXYGEN__
3478*10465441SEvalZero #define IP6_DEBUG                       LWIP_DBG_OFF
3479*10465441SEvalZero #endif
3480*10465441SEvalZero 
3481*10465441SEvalZero /**
3482*10465441SEvalZero  * DHCP6_DEBUG: Enable debugging in dhcp6.c.
3483*10465441SEvalZero  */
3484*10465441SEvalZero #if !defined DHCP6_DEBUG || defined __DOXYGEN__
3485*10465441SEvalZero #define DHCP6_DEBUG                     LWIP_DBG_OFF
3486*10465441SEvalZero #endif
3487*10465441SEvalZero /**
3488*10465441SEvalZero  * @}
3489*10465441SEvalZero  */
3490*10465441SEvalZero 
3491*10465441SEvalZero /**
3492*10465441SEvalZero  * LWIP_TESTMODE: Changes to make unit test possible
3493*10465441SEvalZero  */
3494*10465441SEvalZero #if !defined LWIP_TESTMODE
3495*10465441SEvalZero #define LWIP_TESTMODE                   0
3496*10465441SEvalZero #endif
3497*10465441SEvalZero 
3498*10465441SEvalZero /*
3499*10465441SEvalZero    --------------------------------------------------
3500*10465441SEvalZero    ---------- Performance tracking options ----------
3501*10465441SEvalZero    --------------------------------------------------
3502*10465441SEvalZero */
3503*10465441SEvalZero /**
3504*10465441SEvalZero  * @defgroup lwip_opts_perf Performance
3505*10465441SEvalZero  * @ingroup lwip_opts_debug
3506*10465441SEvalZero  * @{
3507*10465441SEvalZero  */
3508*10465441SEvalZero /**
3509*10465441SEvalZero  * LWIP_PERF: Enable performance testing for lwIP
3510*10465441SEvalZero  * (if enabled, arch/perf.h is included)
3511*10465441SEvalZero  */
3512*10465441SEvalZero #if !defined LWIP_PERF || defined __DOXYGEN__
3513*10465441SEvalZero #define LWIP_PERF                       0
3514*10465441SEvalZero #endif
3515*10465441SEvalZero /**
3516*10465441SEvalZero  * @}
3517*10465441SEvalZero  */
3518*10465441SEvalZero 
3519*10465441SEvalZero #endif /* LWIP_HDR_OPT_H */
3520