lwipopts.h 是协议栈给用户的配置接口。
src/include/lwip/opt.h 文件中包含了 lwipopts.h。协议栈在 src/include/lwip/opt.h 做好了默认配置,如果用户在lwipopts.h 中配置的相关参数后则会优先使用用户的配置。
// 无操作系统,使用FreeRTOS时为0,使用AutoSar或baremental时为1
#define NO_SYS 1
#if NO_SYS == 0
// 当NO_SYS 为0时,可以使能下面两个选项,NO_SYS为1时下面选项必须配置为0,或不配置,默认为0
// 代表两种应用编程接口
#define LWIP_NETCONN 1
#define LWIP_SOCKET 1
// 网卡相关的函数接口,在FreeRTOS下能用改接口,AutoSar或baremental下不能用。
#define LWIP_NETIF_API 1
#endif
// 内存类相关配置
// 内存对齐,一般是4字节对齐
#define MEM_ALIGNMENT 4
// mem_malloc 使用该内存
// pbuf_alloc 的type==PBUF_RAM时调用mem_malloc 使用该内存
#define MEM_SIZE (22 * 1024)
// udp_new 在不释放的情况下最多创建udp_pcb的个数
#define MEMP_NUM_UDP_PCB 6
// 在不释放的情况下最多创建tcp_pcb的个数
#define MEMP_NUM_TCP_PCB 10
// 在不释放的情况下最多创建的tcp_pcb_listen的个数,监听pcb(服务端pcb)
#define MEMP_NUM_TCP_PCB_LISTEN 6
// 结构体 struct tcp_seg的个数,
// memp_malloc(MEMP_TCP_SEG), 在tcp_write函数中使用
#define MEMP_NUM_TCP_SEG 22
// 超时结构体,struct sys_timeo的个数,
// memp_malloc(MEMP_SYS_TIMEOUT)
// 改值得设置需要大于协议栈的超时时间的个数
// src/core/timeout.c 中数组struct lwip_cyclic_timer lwip_cyclic_timers[]的元素个数
#define MEMP_NUM_SYS_TIMEOUT 10
// pbuf 结构体的个数, 用作pbuf引用。仅申请pbuf结构体,引用别处的payload
// memp_malloc(MEMP_PBUF)
#define MEMP_NUM_PBUF 15
// memp_malloc(MEMP_PBUF_POOL),申请pbuf池中的pbuf(pbuf结构体+payload)
// payload 的长度固定为 PBUF_POOL_BUFSIZE
// pbuf内存池中的pbuf的最大个数
#define PBUF_POOL_SIZE 16
// 一个pbuf的payload 的长度,应设置为以太网帧最大的值
#define PBUF_POOL_BUFSIZE LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_ENCAPSULATION_HLEN+PBUF_LINK_HLEN)
// TCP包在网络中生存时间,默认为255
#define TCP_TTL 255
// 传输层最大段的大小
#define TCP_MSS (1500 - 40)
// 每个tcp_pcb的发送缓存区最大值,在创建tcp_pcb时初始化为改值。
// 不能小于 (2*TCP_MSS)
#define TCP_SND_BUF (6 * TCP_MSS)
#define TCP_SND_QUEUELEN (3 * TCP_SND_BUF) / TCP_MSS
// 每个tcp_pcb的接收窗口最大值,在创建tcp_pcb时初始化为改值。
#define TCP_WND (16 * TCP_MSS)
// 协议栈使能TCP
#define LWIP_TCP 1
// 在使用IPv4的情况下使能ICMP, IPv6下是LWIP_ICMP6
#define LWIP_ICMP 1
// 在使用IPv4的情况下使能DHCP, LWIP_IPV6_DHCP6
#define LWIP_DHCP 1
// 协议栈使能UDP
#define LWIP_UDP 1
// TCP包在网络中生存时间,默认为255
#define TCP_TTL 255
// UDP包在网络中生存时间,默认为255
#define UDP_TTL 255
// 校验选项配置
#ifdef CHECKSUM_BY_HARDWARE
/* CHECKSUM_GEN_IP==0: Generate checksums by hardware for outgoing IP packets.*/
#define CHECKSUM_GEN_IP 0
/* CHECKSUM_GEN_UDP==0: Generate checksums by hardware for outgoing UDP packets.*/
#define CHECKSUM_GEN_UDP 0
/* CHECKSUM_GEN_TCP==0: Generate checksums by hardware for outgoing TCP packets.*/
#define CHECKSUM_GEN_TCP 0
/* CHECKSUM_CHECK_IP==0: Check checksums by hardware for incoming IP packets.*/
#define CHECKSUM_CHECK_IP 0
/* CHECKSUM_CHECK_UDP==0: Check checksums by hardware for incoming UDP packets.*/
#define CHECKSUM_CHECK_UDP 0
/* CHECKSUM_CHECK_TCP==0: Check checksums by hardware for incoming TCP packets.*/
#define CHECKSUM_CHECK_TCP 0
#else
/* CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets.*/
#define CHECKSUM_GEN_IP 1
/* CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets.*/
#define CHECKSUM_GEN_UDP 1
/* CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets.*/
#define CHECKSUM_GEN_TCP 1
/* CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets.*/
#define CHECKSUM_CHECK_IP 1
/* CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets.*/
#define CHECKSUM_CHECK_UDP 1
/* CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets.*/
#define CHECKSUM_CHECK_TCP 1
#endif
//#define LWIP_TIMERS 1
//#define TCP_TMR_INTERVAL 20