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

TCP/IP协议学习(二) LWIP用户自定义配置文件解析的更多相关文章

  1. TCP/IP协议学习(一) LWIP实现网络远程IAP下载更新

    最近需要实现通过TCP/IP远程IAP在线更新功能,忙了2周终于在原有嵌入式服务器的基础上实现了该功能,这里就记录下实现的过程. IAP又称在应用编程,其实说简单点就是实现不需要jlink,仅通过芯片 ...

  2. TCP/IP协议族(二) HTTP报文头解析

    本篇博客我们就来详细的聊一下HTTP协议的常用头部字段,当然我们将其分为请求头和响应头进行阐述.下方是报文头每个字段的格式,首先是头部字段的名称,如Accept,冒号后方紧跟的是该字段名所对应的值,每 ...

  3. TCP/IP协议学习之实例ping命令学习笔记

    TCP/IP协议学习之实例ping命令学习笔记(一) 一. 目的为了让网络协议学习更有效果,在真实网络上进行ping命令前相关知识的学习,暂时不管DNS,在内网中,进行2台主机间的ping命令的整个详 ...

  4. TCP/IP协议学习(五) 基于C# Socket的C/S模型

    TCP/IP协议作为现代网络通讯的基石,内容包罗万象,直接去理解理论是比较困难的:然而通过实践先理解网络通讯的理解,在反过来理解学习TCP/IP协议栈就相对简单很多.C#通过提供的Socket API ...

  5. TCP/IP协议(二)tcp/ip基础知识

    今天凌晨时候看书,突然想到一个问题:怎样做到持续学习?然后得出这样一个结论:放弃不必要的社交,控制欲望,克服懒惰... 然后又有了新的问题:学习效率时高时低,状态不好怎么解决?这也是我最近在思考的问题 ...

  6. TCP/IP协议学习(四) 协议概述

    生活中有舒适区,借口成为懒惰的护身符,学习也有舒适区,逃避便是阻止进步的最大障碍. 经过半年多嵌入式方面的工作和学习,我提高了很多,但同时我也对自己所面临的问题逐渐清晰: 1. 偏于实践,理论基础不牢 ...

  7. tcp/ip协议学习笔记一

    一. 简述 以前在学校学习计算机网络的时候学习多是网络7层模型OSI,了解了一些基本的计算机网络概念和协议通信格式,但是一直没弄明白其中的原理,包括各层之间的关系,应用,还有一些常见的令牌环网到底是什 ...

  8. TCP/IP协议学习笔记

    计算机网络基础知识复习汇总:计算机网络基础知识复习 HTTP协议的解析:剖析 HTTP 协议 一个系列的解析文章: TCP/IP详解学习笔记(1)-- 概述 TCP/IP详解学习笔记(2)-- 数据链 ...

  9. TCP/IP协议学习-1.概述

    目录 TCP/IP协议概述 分层 延伸知识 FTP例子 为什么需要网络层和传输层 TCP/IP的分层 封装 分用 总结 本文主要摘抄自书籍<TCP/IP详解卷一:协议>与TCP协议相关内容 ...

随机推荐

  1. 使用Mongo官方驱动操作Mongo数据库

    首先到 https://github.com/mongodb/mongo-csharp-driver/downloads 下载Mongo官方驱动 下载完成后引用到项目中 public class Co ...

  2. net-snmp源码VS2013编译添加加密支持(OpenSSL)(在VS里配置编译OpenSSL)

    net-snmp源码VS2013编译添加加密支持(OpenSSL) snmp v3 协议使用了基于用户的安全模型,具有认证和加密两个模块. 认证使用的算法是一般的消息摘要算法,例如MD5/SHA等.这 ...

  3. [转]倍数提高工作效率的 Android Studio 奇技

    转自:http://android.jobbole.com/81687/ 倍数提高工作效率的 Android Studio 奇技 2015/10/08 · 技术分享 · 4 评论· Android S ...

  4. Git reset 常见用法

    Git reset 1. 文件从暂存区回退到工作区 2. 版本回退 1.1 git reset HEAD filename :回退文件,将文件从暂存区回退到工作区 //也可以使用 git reset ...

  5. 个人对AutoResetEvent和ManualResetEvent的理解(转载)

    仅个人见解,不对之处请指正,谢谢. 一.作用 AutoResetEvent和ManualResetEvent可用于控制线程暂停或继续,拥有重要的三个方法:WaitOne.Set和Reset. 这三个方 ...

  6. JQuery html API支持解析执行Javascript脚本功能实现-代码分析

    JQuery html用法(功能类似innerHTML) 开发中需要使用Ajax技术来更新页面局部区域, 使用的方法是ajax获取html代码段(字符串),然后将这个html代码段作为参数,传入目标D ...

  7. CentOS编译安装PHP 7.0

    问题1: Cannot find ldap.h 解决办法: yum install openldapyum install openldap-devel 问题2: Cannot find ldap l ...

  8. JAVA NIO系列(四) 选择器

    前面介绍过Channel.Buffer,后面的文章主要讲解Selector的实践以及实现原理,选择器的概念比起通道.缓冲区要复杂一些,并且选择器是NIO中最重要的一部分内容. 为什么使用Selecto ...

  9. SignalR实时推送

    SignalR 的实现机制与 .NET WCF 或 Remoting 是相似的,都是使用远程代理来实现.在具体使用上,有两种不同目的的接口:PersistentConnection 和 Hubs,其中 ...

  10. C++复现经典游戏——扫雷

    国庆小长假,当大家都去看人山人海的时候,我独自一人狂码代码.这两天想要实现的内容是Windows上的一个经典游戏——扫雷.相信90后和一些上班族对此并不陌生.然而,从win8开始,扫雷就不再是Wind ...