TCP/IP協議學習(二) LWIP使用者自定義配置檔案解析
阿新 • • 發佈:2018-11-29
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