/* * * Copyright (c) 2020 Project CHIP Authors * Copyright (c) 2019 Google LLC. * Copyright (c) 2014-2018 Nest Labs, Inc. * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @file * This file describes compile-time constants for configuring LwIP * for use in standalone (desktop) environments. * */ #ifndef __LWIPOPTS_H__ #define __LWIPOPTS_H__ #if CHIP_HAVE_CONFIG_H #include #endif #include /** * NO_SYS==1: Provides VERY minimal functionality. Otherwise, * use lwIP facilities. */ #define NO_SYS 0 /** * MEM_ALIGNMENT: should be set to the alignment of the CPU * 4 byte alignment -> #define MEM_ALIGNMENT 4 * 2 byte alignment -> #define MEM_ALIGNMENT 2 */ #define MEM_ALIGNMENT (4) /** * MEM_SIZE: specify bigger memory size to pass LwIP-internal unit tests * (only needed when building tests) */ #ifdef CHIP_WITH_TESTS #define MEM_SIZE (16000) #endif /** * Use Malloc from LibC - saves code space */ #define MEM_LIBC_MALLOC (0) /** * Do not use memory pools to create fixed, statically allocated pools of * memory in lieu of the Standard C Library heap and APIs. */ #define MEM_USE_POOLS (0) /** * Do not use custom memory pools for specific, named LwIP objects, sourced * from lwippools.h. */ #define MEM_USE_CUSTOM_POOLS (MEM_USE_POOLS) /** * MEMP_NUM_NETBUF: the number of struct netbufs. * (only needed if you use the sequential API, like api_lib.c) */ #define MEMP_NUM_NETBUF (PBUF_POOL_SIZE) /** * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments. * (requires the LWIP_TCP option) */ #define MEMP_NUM_TCP_SEG (TCP_SND_QUEUELEN + 1) /** * PBUF_POOL_SIZE: the number of buffers in the pbuf pool. * * This is just a default designed to be overridden by the FreeRTOS.mk makefile * To perform this override, define the makefile variable LWIP_NUM_PACKET_BUFFERS_IN_POOL */ #ifndef PBUF_POOL_SIZE #define PBUF_POOL_SIZE (10) #endif /* * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled. * Since the received pbufs are enqueued, be sure to configure * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive * packets even if the maximum amount of fragments is enqueued for reassembly! * */ #if PBUF_POOL_SIZE > 2 #ifndef IP_REASS_MAX_PBUFS #define IP_REASS_MAX_PBUFS (PBUF_POOL_SIZE - 2) #endif #else #define IP_REASS_MAX_PBUFS 0 #define IP_REASSEMBLY 0 #endif /** * MEMP_NUM_REASSDATA: the number of IP packets simultaneously queued for * reassembly (whole packets, not fragments!) */ #if IP_REASS_MAX_PBUFS > 1 #ifndef MEMP_NUM_REASSDATA #define MEMP_NUM_REASSDATA (IP_REASS_MAX_PBUFS - 1) #endif #else #define MEMP_NUM_REASSDATA 0 #endif #define PAYLOAD_MTU (1500) /** * TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default, * you might want to increase this.) * For the receive side, this MSS is advertised to the remote side * when opening a connection. For the transmit size, this MSS sets * an upper limit on the MSS advertised by the remote host. */ #define TCP_MSS (1152) /** * PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is * designed to accommodate single full size link-layer frame in one pbuf, including * the link-layer header and any link-layer encapsulation header, and the pbuf * structure itself. */ #define PBUF_POOL_BUFSIZE \ LWIP_MEM_ALIGN_SIZE(PAYLOAD_MTU + PBUF_LINK_ENCAPSULATION_HLEN + PBUF_LINK_HLEN) + LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf) + 1) /** * TCP_SND_BUF: TCP sender buffer space (bytes). * must be at least as much as (2 * TCP_MSS) for things to work smoothly */ #define TCP_SND_BUF (6 * TCP_MSS) /** * ETH_PAD_SIZE: the header space required preceeding the of each pbuf in the pbuf pool. The default is * designed to accommodate single full size TCP frame in one pbuf, including * TCP_MSS, IP header, and link header. * * This is zero since the role has been taken over by SUB_ETHERNET_HEADER_SPACE as ETH_PAD_SIZE was not always obeyed */ #define ETH_PAD_SIZE (0) /** * LWIP_NETIF_TX_SINGLE_PBUF: if this is set to 1, lwIP tries to put all data * to be sent into one single pbuf. This is for compatibility with DMA-enabled * MACs that do not support scatter-gather. * Beware that this might involve CPU-memcpy before transmitting that would not * be needed without this flag! Use this only if you need to! * * @todo: TCP and IP-frag do not work with this, yet: */ #define LWIP_NETIF_TX_SINGLE_PBUF (0) /** Define LWIP_COMPAT_MUTEX if the port has no mutexes and binary semaphores * should be used instead */ #define LWIP_COMPAT_MUTEX (1) /** Define LWIP_COMPAT_MUTEX_ALLOWED if the platform concurrency model has no * support for avoiding priority inversion deadlocks */ #define LWIP_COMPAT_MUTEX_ALLOWED (1) /** * SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain * critical regions during buffer allocation, deallocation and memory * allocation and deallocation. */ #define SYS_LIGHTWEIGHT_PROT (0) /** * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread. * The stack size value itself is platform-dependent, but is passed to * sys_thread_new() when the thread is created. */ #define TCPIP_THREAD_STACKSIZE (1300) /** * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread. * The priority value itself is platform-dependent, but is passed to * sys_thread_new() when the thread is created. */ #define TCPIP_THREAD_PRIO (7) #define TCP_LISTEN_BACKLOG (1) /** * LWIP_DHCP==1: Enable DHCP module. */ #define LWIP_DHCP (1) /** * Enable automatic IPv4 link-local address assignment. */ #define LWIP_AUTOIP 1 /** * Allow DHCP and automatic IPv4 link-local address assignment to * work cooperatively. */ #define LWIP_DHCP_AUTOIP_COOP 1 /** * LWIP_PROVIDE_ERRNO: errno definitions from the Standard C Library. */ #undef LWIP_PROVIDE_ERRNO /** * ERRNO: set errno on interface invocation failures */ #define ERRNO (1) /** * MEMP_NUM_RAW_PCB: Number of raw connection PCBs * (requires the LWIP_RAW option) */ #ifndef MEMP_NUM_RAW_PCB #define MEMP_NUM_RAW_PCB (5) #endif /** * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One * per active UDP "connection". * (requires the LWIP_UDP option) */ #ifndef MEMP_NUM_UDP_PCB #define MEMP_NUM_UDP_PCB (6) #endif /** * MEMP_NUM_SYS_TIMEOUT: the number of simulateously active timeouts. * (requires NO_SYS==0) * Must be larger than or equal to LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + * PPP_SUPPORT Since each InetTimer requires one matching LwIP timeout (if built with LwIP option), the number should be expanded to * be (All LwIP needs) + (max number of InetTimers) */ #define MEMP_NUM_SYS_TIMEOUT (48) /* ARP before DHCP causes multi-second delay - turn it off */ #define DHCP_DOES_ARP_CHECK (0) /** * LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1) and loopif.c */ #define LWIP_HAVE_LOOPIF (1) /** * LWIP_NETIF_LOOPBACK==1: Support sending packets with a destination IP * address equal to the netif IP address, looping them back up the stack. */ #define LWIP_NETIF_LOOPBACK (0) /** * MEMP_NUM_NETCONN: the number of struct netconns. * (only needed if you use the sequential API, like api_lib.c) */ #define MEMP_NUM_NETCONN (8) /** * LWIP_SO_RCVTIMEO==1: Enable SO_RCVTIMEO processing. */ #define LWIP_SO_RCVTIMEO (1) /** * LWIP_IGMP==1: Turn on IGMP module. */ #define LWIP_IGMP (1) /** * SO_REUSE==1: Enable SO_REUSEADDR option. * Required by IGMP for reuse of multicast address and port by other sockets */ #define SO_REUSE (1) /** * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS * transport. */ #define LWIP_DNS (1) /** * LWIP_POSIX_SOCKETS_IO_NAMES==1: Enable POSIX-style sockets functions names. * Disable this option if you use a POSIX operating system that uses the same * names (read, write & close). (only used if you use sockets.c) * * We disable this because this otherwise collides with the Standard C * Library where both LWIP and its headers are included. */ #define LWIP_POSIX_SOCKETS_IO_NAMES (0) #ifdef LWIP_SO_RCVBUF #if (LWIP_SO_RCVBUF == 1) #include /* Needed because RECV_BUFSIZE_DEFAULT is defined as INT_MAX */ #endif /* if ( LWIP_SO_RCVBUF == 1 ) */ #endif /* ifdef LWIP_SO_RCVBUF */ /** * LWIP_STATS : Turn on statistics gathering */ #define LWIP_STATS (1) /** * LWIP_IPV6==1: Enable IPv6 */ #ifndef LWIP_IPV6 #define LWIP_IPV6 1 #endif /** * LWIP_IPV6_DHCP6==1: enable DHCPv6 stateful address autoconfiguration. */ #ifndef LWIP_IPV6_DHCP6 #define LWIP_IPV6_DHCP6 1 #endif /** * LWIP_IPV6_MLD==1: Enable multicast listener discovery protocol. */ #ifndef LWIP_IPV6_MLD #define LWIP_IPV6_MLD 1 #endif /** * MEMP_NUM_MLD6_GROUP: Maximum number of IPv6 multicast groups that * can be joined. Allocate one (1) for the link local address * solicited node multicast group, one (1) for the any/unspecified * address solicited node multicast group (which seems to be used * for/by DAD in this epoch of LwIP), and another four (4) for * application groups. */ #define MEMP_NUM_MLD6_GROUP ((1 + 1) + 4) /** * LWIP_IPV6_FORWARD==1: Enable IPv6 forwarding. */ #ifndef LWIP_IPV6_FORWARD #define LWIP_IPV6_FORWARD 1 #endif /** * LWIP_IPV6_ROUTE_TABLE_SUPPORT==1: Enable support for a routing table and referring these during forwarding. */ #ifndef LWIP_IPV6_ROUTE_TABLE_SUPPORT #define LWIP_IPV6_ROUTE_TABLE_SUPPORT 1 #endif /** * IPV6_FRAG_COPYHEADER==1: Enable copying of IPv6 fragment headers on 64-bit platforms. */ #ifndef IPV6_FRAG_COPYHEADER #if defined(__x86_64__) #define IPV6_FRAG_COPYHEADER 1 #else #define IPV6_FRAG_COPYHEADER 0 #endif #endif /** * Debug printing * By default enable debug printing for debug build, but set level to off * This allows user to change any desired debug level to on. */ #ifdef LWIP_DEBUG #define MEMP_OVERFLOW_CHECK (1) #define MEMP_SANITY_CHECK (1) #define MEM_DEBUG LWIP_DBG_OFF #define MEMP_DEBUG LWIP_DBG_OFF #define PBUF_DEBUG LWIP_DBG_ON #define API_LIB_DEBUG LWIP_DBG_ON #define API_MSG_DEBUG LWIP_DBG_ON #define TCPIP_DEBUG LWIP_DBG_ON #define NETIF_DEBUG LWIP_DBG_ON #define SOCKETS_DEBUG LWIP_DBG_ON #define DEMO_DEBUG LWIP_DBG_ON #define IP_DEBUG LWIP_DBG_ON #define IP6_DEBUG LWIP_DBG_ON #define IP_REASS_DEBUG LWIP_DBG_ON #define RAW_DEBUG LWIP_DBG_ON #define ICMP_DEBUG LWIP_DBG_ON #define UDP_DEBUG LWIP_DBG_ON #define TCP_DEBUG LWIP_DBG_ON #define TCP_INPUT_DEBUG LWIP_DBG_ON #define TCP_OUTPUT_DEBUG LWIP_DBG_ON #define TCP_RTO_DEBUG LWIP_DBG_ON #define TCP_CWND_DEBUG LWIP_DBG_ON #define TCP_WND_DEBUG LWIP_DBG_ON #define TCP_FR_DEBUG LWIP_DBG_ON #define TCP_QLEN_DEBUG LWIP_DBG_ON #define TCP_RST_DEBUG LWIP_DBG_ON #define PPP_DEBUG LWIP_DBG_OFF extern unsigned char gLwIP_DebugFlags; #define LWIP_DBG_TYPES_ON gLwIP_DebugFlags #endif /** * The WICED definition of PBUF_POOL_BUFSIZE includes a number of * sizeof() instantiations which causes the C preprocessor to * fail. Disable TCP configuration constant sanity checks to work * around this. */ #define LWIP_DISABLE_TCP_SANITY_CHECKS (1) /** * LwIP defaults the size of most mailboxes (i.e. message queues) to * zero (0). That generally makes RTOSes such as FreeRTOS very * unhappy. Specify reasonable defaults instead. */ #define TCPIP_MBOX_SIZE 6 #define DEFAULT_RAW_RECVMBOX_SIZE 6 #define DEFAULT_UDP_RECVMBOX_SIZE 6 #define DEFAULT_TCP_RECVMBOX_SIZE 6 /* --------------------------------- ---------- RAW options ---------- --------------------------------- */ /** * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. */ #define LWIP_RAW 1 /* ---------------------------------------------- ---------- Sequential layer options ---------- ---------------------------------------------- */ /** * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c) */ #define LWIP_NETCONN 0 /* ------------------------------------ ---------- Socket options ---------- ------------------------------------ */ /** * LWIP_SOCKET==1: Enable Socket API (require to use sockets.c) */ #define LWIP_SOCKET 0 /** * Enable locking in the lwip (tcpip) thread. */ #ifndef LWIP_TCPIP_CORE_LOCKING #define LWIP_TCPIP_CORE_LOCKING 1 #endif /** * Enable support for TCP keepalives. */ #ifndef LWIP_TCP_KEEPALIVE #define LWIP_TCP_KEEPALIVE 1 #endif /** LWIP_DONT_PROVIDE_BYTEORDER_FUNCTIONS: * Ensure compatibilty with platforms where LwIP is configured not to define the host/network byte-order conversion * functions normally provided in on POSIX systems. */ #ifndef LWIP_DONT_PROVIDE_BYTEORDER_FUNCTIONS #define LWIP_DONT_PROVIDE_BYTEORDER_FUNCTIONS 1 #endif #endif /* __LWIPOPTS_H__ */