/* * This file is part of the MicroPython project, http://micropython.org/ * * The MIT License (MIT) * * Copyright (c) 2025 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef MICROPY_INCLUDED_LWIPOPTS_COMMON_H #define MICROPY_INCLUDED_LWIPOPTS_COMMON_H #include "py/mpconfig.h" // This is needed to access `next_timeout` via `sys_timeouts_get_next_timeout()`. #define LWIP_TESTMODE 1 // This sys-arch protection is not needed. // Ports either protect lwIP code with flags, or run it at PendSV priority. #define SYS_ARCH_DECL_PROTECT(lev) do { } while (0) #define SYS_ARCH_PROTECT(lev) do { } while (0) #define SYS_ARCH_UNPROTECT(lev) do { } while (0) #define NO_SYS 1 #define SYS_LIGHTWEIGHT_PROT 1 #define MEM_ALIGNMENT 4 #define LWIP_CHKSUM_ALGORITHM 3 #define LWIP_CHECKSUM_CTRL_PER_NETIF 1 #define LWIP_ARP 1 #define LWIP_ETHERNET 1 #define LWIP_RAW 1 #define LWIP_NETCONN 0 #define LWIP_SOCKET 0 #define LWIP_STATS 0 #define LWIP_NETIF_HOSTNAME 1 #define LWIP_DHCP 1 #define LWIP_DHCP_CHECK_LINK_UP 1 #define LWIP_DHCP_DOES_ACD_CHECK 0 // to speed DHCP up #define LWIP_DNS 1 #define LWIP_DNS_SUPPORT_MDNS_QUERIES 1 #define LWIP_MDNS_RESPONDER 1 #define LWIP_IGMP 1 #if MICROPY_PY_LWIP_PPP #define PPP_SUPPORT 1 #define PAP_SUPPORT 1 #define CHAP_SUPPORT 1 #endif #define LWIP_NUM_NETIF_CLIENT_DATA LWIP_MDNS_RESPONDER #define MEMP_NUM_UDP_PCB (4 + LWIP_MDNS_RESPONDER) // The mDNS responder requires 5 timers per IP version plus 2 others. Not having enough silently breaks it. #define MEMP_NUM_SYS_TIMEOUT (LWIP_NUM_SYS_TIMEOUT_INTERNAL + (LWIP_MDNS_RESPONDER * (2 + (5 * (LWIP_IPV4 + LWIP_IPV6))))) #define SO_REUSE 1 #define TCP_LISTEN_BACKLOG 1 // TCP memory settings. // Default lwIP settings takes 15800 bytes; TCP d/l: 380k/s local, 7.2k/s remote; TCP u/l is very slow. #ifndef MEM_SIZE #if 0 // lwIP takes 19159 bytes; TCP d/l and u/l are around 320k/s on local network. #define MEM_SIZE (5000) #define TCP_WND (4 * TCP_MSS) #define TCP_SND_BUF (4 * TCP_MSS) #endif #if 1 // lwIP takes 26700 bytes; TCP dl/ul are around 750/600 k/s on local network. #define MEM_SIZE (8000) #define TCP_MSS (800) #define TCP_WND (8 * TCP_MSS) #define TCP_SND_BUF (8 * TCP_MSS) #define MEMP_NUM_TCP_SEG (32) #endif #if 0 // lwIP takes 45600 bytes; TCP dl/ul are around 1200/1000 k/s on local network. #define MEM_SIZE (16000) #define TCP_MSS (1460) #define TCP_WND (8 * TCP_MSS) #define TCP_SND_BUF (8 * TCP_MSS) #define MEMP_NUM_TCP_SEG (32) #endif #endif // MEM_SIZE // Needed for PPP. #define sys_jiffies sys_now typedef uint32_t sys_prot_t; #endif // MICROPY_INCLUDED_LWIPOPTS_COMMON_H