1. 程式人生 > >TCP/IP協議學習(二) LWIP使用者自定義配置檔案解析

TCP/IP協議學習(二) LWIP使用者自定義配置檔案解析

 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