LWIP協議支持用戶配置,可以通過用戶裁剪實現最優化配置,LWIP默認包含opts.h作爲系統默認配置,不過通過添加lwipopts.h文件幷包含在opts.h頭文件之前就可以對lwip進行用戶裁剪,這裏給出相關參數的含義,不過具體項目還應該根據實際情況裁剪。
#ifndef LWIPOPTS_H
#define LWIPOPTS_H
//*****************************************************************************
//
// ---------- SNMP options ----------
//
//*****************************************************************************
#define LWIP_SNMP 0 //SNMP協議啓用
#if LWIP_SNMP
#define SNMP_CONCURRENT_REQUESTS 1 //SNMP當前允許請求數量
#define SNMP_TRAP_DESTINATIONS 1 //SNMP trap目的地址數目
#define SNMP_PRIVATE_MIB 1 //SNMP 私有節點設置允許
#define SNMP_SAFE_REQUESTS 1 //僅回覆SNMP安全請求
#endif
//*****************************************************************************
//
// ---------- Platform specific locking ----------
//
//*****************************************************************************
#define SYS_LIGHTWEIGHT_PROT 1 //臨界中斷保護開關(多任務模式下開啓)
#define NO_SYS 0 //LWIP獨立運行或者基於操作系統,爲0則基於操作系統
//*****************************************************************************
//
// ---------- Memory options ----------
//
//*****************************************************************************
#define MEM_LIBC_MALLOC 0 //採用LWIP自帶函數分配動態內存
#define MEM_LIBC_MALLOC 0 //內存池不通過內存堆來分配
#define MEM_ALIGNMENT 4 //字節對齊(和CPU的位數有關,32位設置爲4)
#define MEM_SIZE 8*1024 //堆內存大小,用於發送數據
#define MEMP_SANITY_CHECK 0 //mem_free調用後檢查鏈表是否有循環 by zc
#define MEMP_OVERFLOW_CHECK 0 //lwip堆內存溢出檢查
#define MEM_USE_POOLS 0 //內存堆不通過內存池分配
#define MEM_USE_POOLS_TRY_BIGGER_POOL 0 //申請內存失敗不選擇大內存池
#define MEMP_USE_CUSTOM_POOLS 0 //同上
//*****************************************************************************
//
// ---------- Internal Memory Pool Sizes ----------
//
//*****************************************************************************
#define MEMP_NUM_PBUF 60 //來自memp的PBUF_ROM(ROM內存池)和PBUF_REF(RAM內存池)數目最大總和
#define MEMP_NUM_RAW_PCB 4 //RAW連接的PCB數目(需要LWIP RAW有效)
#define MEMP_NUM_UDP_PCB 4 //能夠同時連接的UDP的PCB數目
#define MEMP_NUM_TCP_PCB (TCP_WND + TCP_SND_BUF)/TCP_MSS //能夠同時連接的TCP的PCB數目 12
#define MEMP_NUM_TCP_PCB_LISTEN 1 //(TCP_WND + TCP_SND_BUF)/TCP_MSS //能夠同時監聽的TCP的PCB數目
#define MEMP_NUM_TCP_SEG 40 //80 能夠同時在隊列裏的TCP的PCB數目
#define MEMP_NUM_REASSDATA 8 //最大同時等待重裝的IP包數目,是整個IP包,不是IP分片
#define MEMP_NUM_ARP_QUEUE 30 //最大等待回覆ARP請求的數目(ARP_QUEUEING有效)
#define MEMP_NUM_IGMP_GROUP 8 //多播組同時接收數據的最大成員數目(LWIP_IGMP有效)
#define MEMP_NUM_SYS_TIMEOUT 20 //能夠同時激活的超時連接數目(NO_SYS==0有戲)
#define MEMP_NUM_NETBUF 10 //netbufs結構的數目
#define MEMP_NUM_NETCONN 16 //netconns結構的數目
#define MEMP_NUM_TCPIP_MSG_API 40 //tcpip_msg結構的最大數目,用於callback和API的通訊 by zc
#define MEMP_NUM_TCPIP_MSG_INPKT 40 //tcpip_msg接受數據包結構的最大數目 by zc
#define PBUF_POOL_SIZE 48 //內存池數量(小內存減小該選項可大大減小內存佔用)
//*****************************************************************************
//
// ---------- ARP options ----------
//
//*****************************************************************************
#define LWIP_ARP 1 //ARP協議允許
#define ARP_TABLE_SIZE 10 //ARP維護的表項大小
#define ARP_QUEUEING 1 //硬件地址解析時,將發送數據包計入隊列
#define ETHARP_TRUST_IP_MAC 1 //所有IP數據包都會直接引起ARP table的更新,
//爲0則非表項內IP-MAC關係會引起ARP請求,可以避免IP欺騙,不過會造成延時
#define ETHARP_SUPPORT_VLAN 0 //非虛擬局域網,爲1則僅虛擬局域網通訊有效
//*****************************************************************************
//
// ---------- IP options ----------
//
//*****************************************************************************
#define IP_FORWARD 0 //不允許不匹配數據包轉發,多接口時爲1
#define IP_OPTIONS_ALLOWED 1 //帶IP選項數據包允許 爲0則丟棄所有IP數據包
#define IP_REASSEMBLY 1 //允許接收IP包分片包(爲0不允許,不能夠接收大於MTU的包)
#define IP_FRAG 1 //允許發送IP包分片包
#define IP_REASS_MAXAGE 3 //允許接收的最大分段數
#define IP_REASS_MAX_PBUFS 10 //最大允許存在的IP分片包占用的內存池個數
#define IP_FRAG_USES_STATIC_BUF 1 //IP分片使用靜態緩衝區
#define IP_FRAG_MAX_MTU 1500 //IP分片最大緩衝數量
#define IP_DEFAULT_TTL 255 //IP數據包最大經歷設備數目
#define IP_SOF_BROADCAST 0 //IP發送廣播包過濾
#define IP_SOF_BROADCAST_RECV 0 //IP接收廣播包過濾
//*****************************************************************************
//
// ---------- ICMP options ----------
//
//*****************************************************************************
#define LWIP_ICMP 1 //開啓ping包接收/發送
#define ICMP_TTL (IP_DEFAULT_TTL) //ping包最大經歷設備數目
#define LWIP_BROADCAST_PING 0 //不回覆廣播ping包
#define LWIP_MULTICAST_PING 0 //不回覆多播ping包
//*****************************************************************************
//
// ---------- RAW options ----------
//
//*****************************************************************************
#define LWIP_RAW 0 //無操作系統基於回調函數驅動
#define RAW_TTL (IP_DEFAULT_TTL) //應用層數據傳輸次數(基於IP層的TTL)
//*****************************************************************************
//
// ---------- DHCP options ----------
//
//*****************************************************************************
#define LWIP_DHCP 0 //動態主機協議配置(爲1時)
#define LWIP_AUTOIP 0 //動態主機IP地址配置(爲1時)
#define LWIP_DHCP_AUTOIP_COOP 0 //允許上述兩種配置同時存在於1個接口(爲1時)
#define LWIP_DHCP_AUTOIP_COOP_TRIES 9 //DHCP分配允許失敗次數,失敗則使用AUTOUP
//*****************************************************************************
//
// ---------- IGMP options ----------
//
//*****************************************************************************
#define LWIP_IGMP 0 //LWIP組管理協議
//*****************************************************************************
//
// ---------- DNS options -----------
//
//*****************************************************************************
#define LWIP_DNS 0 //域名服務器模塊(依託UDP協議)
#define DNS_TABLE_SIZE 4 //域名服務器維護的最大入口數目
#define DNS_MAX_NAME_LENGTH 256 //域名服務器主機地址最大長度
#define DNS_MAX_SERVERS 2 //域名服務器最大服務數目
#define DNS_DOES_NAME_CHECK 1 //查詢域名服務器時檢測地址名
#define DNS_USES_STATIC_BUF 1 //域名服務器使用靜態地址
#define DNS_MSG_SIZE 512 //域名服務器接收最大通訊數據長度
#define DNS_LOCAL_HOSTLIST 0 //在本地維護域名服務器主機-地址表(爲1時)
#define DNS_LOCAL_HOSTLIST_IS_DYNAMIC 0 //主機-地址表實時更新(爲1時)
//*****************************************************************************
//
// ---------- UDP options ----------
//
//*****************************************************************************
#define LWIP_UDP 1 //啓用UDP協議(snmp協議基於此)
#define LWIP_UDPLITE 1 //UDP協議啓用精簡版
#define UDP_TTL (IP_DEFAULT_TTL) //UDP數據包傳輸次數
#define LWIP_NETBUF_RECVINFO 0 //接收到的數據包除首個外其它不附加目的地址和端口
//*****************************************************************************
//
// ---------- TCP options ----------
//
//*****************************************************************************
#define LWIP_TCP 1 //啓用TCP協議(http協議基於此)
#define TCP_TTL (IP_DEFAULT_TTL) //TCP數據包傳輸次數
#define TCP_WND 4*TCP_MSS //tcp窗口大小
#define TCP_MAXRTX 12 //最大允許重傳TCP數據包數目
#define TCP_SYNMAXRTX 6 //最大允許重傳SYN連接包數目
#define TCP_QUEUE_OOSEQ (LWIP_TCP) //TCP接收隊列外數據塊排序
#define TCP_MSS 1460 //tcp報文最大分段長度
#define TCP_CALCULATE_EFF_SEND_MSS 1 //tcp預計發送的分段長度,爲1則根據窗口大小分配
#define TCP_SND_BUF (8*TCP_MSS) //TCP發送緩衝區 zc 7.1
#define TCP_SND_QUEUELEN (4*(TCP_SND_BUF/TCP_MSS)) //TCP發送隊列長度
#define TCP_SNDLOWAT (TCP_SND_BUF/4) //TCP可發送數據長度
#define TCP_LISTEN_BACKLOG 1 //TCP多連接允許
#define TCP_DEFAULT_LISTEN_BACKLOG 0xff //TCP連接和半連接的總數
#define LWIP_TCP_TIMESTAMPS 0 //TCP時間戳選項
#define TCP_WND_UPDATE_THRESHOLD (TCP_WND / 4) //TCP窗口更新閾值
//TCP定時器設置選項
#define TCP_MSL 10000UL //TCP連接存在時間 單位ms
#define TCP_FIN_WAIT_TIMEOUT 20000UL //FIN等到ACK應答時間 單位ms
#define TCP_TMR_INTERVAL 20 //TCP定時器計數間隔 20ms
//*****************************************************************************
//
// ---------- Internal Memory Pool Sizes ----------
//
//*****************************************************************************
#define PBUF_LINK_HLEN 14 //爲處理以太網頭申請的包長度(本地MAC地址+遠端MAC地址+協議類型) 6+6+2 #define PBUF_POOL_BUFSIZE 256 //單個內存池長度,要考慮到4字節對齊和最佳大小
#define ETH_PAD_SIZE 0 //以太網填充長度,stm32設置爲0 根據發送包判斷
//關係不大.. 默認即可
//*****************************************************************************
//
// ---------- Sequential layer options ----------
//
//*****************************************************************************
#define LWIP_TCPIP_CORE_LOCKING 0 //?
#define LWIP_NETCONN 1 //應用層使用NETCONN相關函數
//*****************************************************************************
//
// ---------- Socket Options ----------
//
//*****************************************************************************
#define LWIP_SOCKET 0 //關閉SOCKET通訊
//#define LWIP_COMPAT_SOCKETS 1
//#define LWIP_POSIX_SOCKETS_IO_NAMES 1
#define LWIP_SO_RCVTIMEO 0 //conn->acceptmbox/recvmbox接收有超時限制,超時後自動斷開連接
//#define LWIP_SO_RCVBUF 0
//#define SO_REUSE 0
//*****************************************************************************
//
// ---------- Statistics options ----------
//
//*****************************************************************************
#define LWIP_STATS 0 //LWIP統計選項
//*****************************************************************************
//
// ---------- checksum options ----------
//
//*****************************************************************************
#define CHECKSUM_GEN_IP 1 //IP校驗和生成
#define CHECKSUM_GEN_UDP 1 //UDP校驗和生成
#define CHECKSUM_GEN_TCP 1 //TCP校驗和生成
#define CHECKSUM_CHECK_IP 1 //IP校驗和校驗
#define CHECKSUM_CHECK_UDP 1 //UDP校驗和校驗
#define CHECKSUM_CHECK_TCP 1 //TCP校驗和校驗
//*****************************************************************************
//
// ---------- TCP KEEPLIVE ----------
//
//*****************************************************************************
#define LWIP_TCP_KEEPALIVE 1 //tcp保活定時器
#define TCP_KEEPIDLE_DEFAULT 60000 //保活時間 60s
#define TCP_KEEPINTVL_DEFAULT 10000 //保活探測 10s
#define TCP_KEEPCNT_DEFAULT 9U
//*****************************************************************************
//
// ---------- DEBUG_OPTIONS ----------
//
//*****************************************************************************
#define DEBUG_OPTIONS 0 //調試代碼
#endif