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