uIP宏定义的详细配置

uIP宏定义的详细配置转自 Jkf40622 的微博 地址 http m blog csdn net article details id 详细说明 uIP 针对每个工程都可以通过 uipopt h 进行配置 这个文件包含了 uIP 的所有编译时选项 应该针对每一个工程对这些选项进行调整 uIP 的发行版包含了一个文档化的 uipopt h 文件 用户可以复制和修改这个文件来达到调整选项的目的 注意

转自Jkf40622的微博。地址http://m.blog.csdn.net/article/details?id=

详细说明:uIP针对每个工程都可以通过uipopt.h进行配置.

这个文件包含了uIP的所有编译时选项,应该针对每一个工程对这些选项进行调整.uIP的发行版包含了一个文档化的uipopt.h文件,用户可以复制和修改这个文件来达到调整选项的目的.

注意:

uipopt.h中的大部分内容都不必修改,反而是uip-conf.h需要的修改较多.



相关文件:

uip-conf.h uip配置文件.

uipopt.h uip配置选项

针对于工程的配置选项:

uip有大量的配置选项,它们都可以根据工程需要重载.它们被保存在一个工程相关的uip-conf.h文件中,所有配置的名称都有UIP_CONF前辍

#define UIP_CONF_MAX_CONNECTIONS 最大的TCP连接数.

#define UIP_CONF_MAX_LISTENPORTS  最大监听的TCP端口数.

#define UIP_CONF_BUFFER_SIZE uip 缓冲区大小.

#define UIP_CONF_BYTE_ORDER CPU字节顺序.

#define UIP_CONF_LOGGING 是否开启日志

#define UIP_CONF_UDP 是否启用UDP功能

#define UIP_CONF_UDP_CHECKSUMS 是否启用UDC校验和.

#define UIP_CONF_STATISTICS UIP配置统计是否开启.

typedef uint8_t u8_t 8位的数据类型.

typedef uint16_t u16_t 16位的数据类型.

typedef unsigned short uip_stats_t 统计数据类型.

复制代码

静态配置选项:

这些选项可以用来静态配置IP地址,条件是UIP_FIXEDADDR必须设为1. 指定节点的配置选项包括IP地址,子网掩码,默认路由及以太网址.而后三项只有在以太网中时才可用.

#define UIP_FIXEDADDR 决定uIP使用固定IP与否.

#define UIP_PINGADDRCONF 设置ping地址.

#define UIP_FIXEDETHADDR ARP模块的编译是否用固定的MAC地址.

复制代码

IP配置选项

#define UIP_TTL 64 定义UIP包的生存时间.TTL.

#define UIP_REASSEMBLY 打开IP包重新组装功能.

#define UIP_REASS_MAXAGE 40 IP片断扔掉之前在重组装缓冲区等待的时间.

复制代码

UDP配置选项

#define UIP_UDP UDP支持是否编译

#define UIP_UDP_CHECKSUMS. 是否使用UDP校验和.

#define UIP_UDP_CONNS 最大并发UDP连接数.

复制代码

TCP配置选项

#define UIP_ACTIVE_OPEN 决定UIP的打开连接支持是否编译.

#define UIP_CONNS 最大同时打开的TCP连接数.

#define UIP_LISTENPORTS 最大TCP监听端口数.

#define UIP_URGDATA  是否编译TCP紧迫数据提醒.

#define UIP_RTO 3 初始重传超时计数,以定时器脉冲个数计.

#define UIP_MAXRTX 8 一段数据最大重传多少次才取消连接.

#define UIP_MAXSYNRTX 5 一段SYN数据要最大得传多少次,才认定连接请求失败.

#define UIP_TCP_MSS (UIP_BUFSIZE – UIP_LLH_LEN – UIP_TCPIP_HLEN) TCP最大段大小

#define UIP_RECEIVE_WINDOW 广播接收器的最大窗口大小.

#define UIP_TIME_WAIT_TIMEOUT 120 一个连接处于TIME_WAIT状态的最大时间.

复制代码

ARP配置选项

#define UIP_ARPTAB_SIZE ARP表大小.

#define UIP_ARP_MAXAGE 120 ARP表的最大存活年龄,单位为10s.

复制代码

通用配置选项

#define UIP_BUFSIZE UIP包缓冲区大小.

#define UIP_STATISTICS 是否编译统计功能.

#define UIP_LOGGING 某些事件的日志功能是否编译.

#define UIP_BROADCAST 广播功能是否支持.

#define UIP_LLH_LEN 链路层头长度.

void uip_log (char *msg) 打印UIP日志信息.

复制代码

CPU架构配置:

这里指定的是CPU大小端模式.当今的CPU多时小端的,然而最著名的例外就是motorolaCPU.它是大端的.应根据CPU的大小端模式不同,配置 BYTE_ORDER. 

#define UIP_BYTE_ORDER UIP所运行的CPU大小端模式.

复制代码

针对应用的配置:

UIP应用是使用单个应用函数数实现的.只要TCP/IP事件发生,uIP就会调用这个函数.这个函数的名字必须在编译时使用UIP_APPCALL注册到uIP.

uIP应用可以在uip_conn结构中保存应用状态.这是通过利用typedef uip_tcp_appstate_t

uip_udp_appstate_t指定应用的类型实现的.包含此定义的文件必须被包含在uipopt.h文件中.

下面是一个例子:

void httpd_appcall(void);

#define UIP_APPCALL     httpd_appcall

struct httpd_state {

  u8_t state;

  u16_t count;

  char *dataptr;

  char *script;

};

typedef struct httpd_state uip_tcp_appstate_t

复制代码

#define UIP_APPCALL smtp_appcall  TCP/IP事件的应答函数名称.

typedef smtp_state uip_tcp_appstate_t 存储在uip_conn中的应用状态类型.

typedef int uip_udp_appstate_t 存储在uip_conn中的应用状态类型

#define UIP_LITTLE_ENDIAN 3412

#define UIP_BIG_ENDIAN 1234

复制代码

1. #define UIP_ACTIVE_OPEN

决定是否支持在uip中打开连接.

如果此工程中工作于uip上层的应用不需要打开TCP连接,可以关闭此项以减小编译后的代码大小.

定义于uipopt.h中的233.

2. 2. #define UIP_ARP_MAXAGE 120

10s为单位的ARP表项的最大年龄.

120代表的是20分钟(BSD中的默认值).

定义于uipopt.h中的358.

引用于uip_arp_timer().

3. 3. #define UIP_ARPTAB_SIZE

1. #define UIP_ACTIVE_OPEN

决定是否支持在uip中打开连接.

如果此工程中工作于uip上层的应用不需要打开TCP连接,可以关闭此项以减小编译后的代码大小.

定义于uipopt.h中的233行.



2. #define UIP_ARP_MAXAGE 120

以10s为单位的ARP表项的最大年龄.

120代表的是20分钟(BSD中的默认值).

定义于uipopt.h中的358行.

引用于uip_arp_timer().



3. #define UIP_ARPTAB_SIZE

ARP表的大小.

如果uip节点可能在本地网络中有很多连接,则此值应设得大些.

定义于uipopt.h中的349行.

引用于uip_arp_init()uip_arp_out(), anduip_arp_timer().



4. #define UIP_BROADCAST

支持广播.

此标志用于配置广播的支持,仅在开启UDP时才有意义.

定义于uipopt.h中的423行.



5. #define UIP_BUFSIZE

uip包缓冲区大小.

不就小于60字节,不须大于1500字节.这个值越小,TCP的吞吐量就越小,相反越大.

定义于uipopt.h中的379行.

引用于uip_split_output().



6. #define UIP_BYTE_ORDERuip运行的CPU构架的字节顺序,可选值仅有两个,分别为BIG_ENDIAN和 LITTLE_ENDIAN.

应用全程:example-mainloop-with-arp.c, and example-mainloop-without-arp.c.

定义于uipopt.h中的475行.



7. #define UIP_CONNS

可同时打开的最大TCP连接数.

由TCP连接是静态开辟的,所以减小此选项的值可以减小RAM占用量,每个TCP连接需要大约30字节的RAM.

定义于uipopt.h中的245行.

引用于uip_connect().



8. #define UIP_FIXEDADDR

决定uIP是否使用固定IP地址.

如果使用固定IP地址,则此地址可以在

uipopt.h中指定.否则,如果想用动态的IP地址,则可以使用uip_sethostaddr()uip_setdraddr() and uip_setnetmask() 三个宏动态指定.

定义于uipopt.h中的97行.



9. #define UIP_FIXEDETHADDR

决定uIP是否使用固定的MAC地址.

若不使用固定的MAC地址,则可用uip_setethaddr()在运行时动态指定.

定义于uipopt.h中的127行.



10. #define UIP_LISTENPORTS

可以同时监听的最大端口数.每监听一个TCP端口需要两字节内存.

定义于uipopt.h中的259行.

引用于

uip_init()uip_listen(), and uip_unlisten().



11. #define UIP_LLH_LEN

链路层头的长度.

这个IP头在uip_buf中的编移量.对于以太网来说,此值为14.对于SLIP来说,其值0 .

定义于uipopt.h中的448行.

引用于uip_ipchksum()uip_process(), and uip_split_output().



12. #define UIP_LOGGING

定义是否编译事件日志.

这对于调试是非常有帮助的.如果打开此项,或必须在工程的构架上实现uip_log().

定义于uipopt.h中的408行.



13. #define UIP_MAXRTX 8

在最多多少次重新发送同一段数据之后,就得取消连接.

此项不应改变.

定义于uipopt.h中的288行.

引用于uip_process()



14. #define UIP_MAXSYNRTX 5

一个SYN数据最多可以重传多少次,之后就得认为连接请求失败.

此项亦不应改变.

定义于uipopt.h中的297行.

引用于uip_process().



15. #define UIP_PINGADDRCONF

设定ping IP地址.

如果设定此项,uip使用ping包来设定其IP地址.此时uip启用时会只有一个空的Ip地址,而把收到的第一个ping包设为自己的地址.

注意:

此项只有在UIP_FIXEDADDR设为0时才可用.

定义于uipopt.h中的114行.

16. #define UIP_REASSEMBLY打开IP包重组.

uip支持碎片IP包的重组.此项特性需要多余的RAM来盛放重组缓冲区.重组代码大小约为700字节.重组缓冲区的大小与uip_buf的大小(由UIP_BUFSIZE配置)相同.

注意:

IP包重组并未经过严格测试.

定义于uipopt.h156行.



17. #define UIP_RECEIVE_WINDOW

通告的接收器窗口.

如果处理器对输入数据处理能力较慢,则应设得低些(uip_buf的大小),否则应设得高些(32768字节).

定义于uipopt.h317行.



18. #define UIP_RTO 3

以时钟脉冲计算的重传超时计数.

此项不应改变.

定义于uipopt.h280行.

引用于uip_process().



19. #define UIP_STATISTICS

决定是否将统计功能加入编译.

统计功能对于调试和显示用户是非常有帮助的.

定义于uipopt.h393行.



20. #define UIP_TCP_MSS (UIP_BUFSIZE – UIP_LLH_LEN – UIP_TCPIP_HLEN)

TCP最大数据段大小.

此值不应大于UIP_BUFSIZE – UIP_LLH_LEN – UIP_TCPIP_HLEN.

定义于uipopt.h305行.



21. #define UIP_TIME_WAIT_TIMEOUT 120一个连接应该停留在TIME_WAIT状态的最长时间.

此配置选项没有真正的实现,所以不应理会.

定义于uipopt.h328行.

引用于uip_process().



22. #define UIP_TTL 64

uip发送的IP包的生存时间(TTL)

通常此项不应更改.

定义于uipopt.h141行.



23. #define UIP_UDP_CHECKSUMS

是否使用UDP校验和.

注意:

对UDP校验和的支持目前并不包含于uIP,故此项无用.

定义于uipopt.h195行.



24. #define UIP_URGDATA

TCP紧迫数据通告功能是否编译.

紧迫数据(带外数据)在TCP中很少用到, 所以很少需要.

定义于uipopt.h273行.



25. typedef uint16_t u16_t

16位数据类型.

这个类型定义定义了通贯uip所使用的16位数据类型.

应用例程:

dhcpc.cdhcpc.hresolv.cresolv.hsmtp.csmtp.htelnetd.c, and uip-conf.h.

定义于uip-conf.h76行.



26. typedef uint8_t u8_t8位数据类型.

此类型定义定义了通贯uIP中使用的8位数据类型.

应用例程:

dhcpc.cdhcpc.hresolv.c,smtp.htelnetd.ctelnetd.h, and uip-conf.h.

定义于uip-conf.h67行.



27. typedef unsigned short uip_stats_t

统计数据类型.

此类型定义定义了通贯uIP使用的统计数据类型.

定义于uip-conf.h86行.





28. typedef uip_tcp_appstate_t

此种类型的应用状态将会被存储于uip_conn结构中.

它通常被typedef为一种保存应用状态信息的结构.

应用例程:

smtp.htelnetd.h, and webclient.h.

定义于smtp.h98行.





29. typedef uip_udp_appstate_t

此种类型的应用状态将会被存储于uip_conn结构中.

它通常被typedef为一种保存应用状态信息的结构.

应用例程:

dhcpc.h.

定义于resolv.h47行.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178051.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午6:08
下一篇 2026年3月26日 下午6:08


相关推荐

  • mysql 读写分离 事务_mysql 读写分离(基础篇)

    mysql 读写分离 事务_mysql 读写分离(基础篇)基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。JanKneschke在《MySQLProxylearnsR/WSplitting》中详细的介绍了这种技巧以及连接池问题:为了实现读写分离我们需要连接池。我们仅在已打开了到一个后端的一条经过认证的连接的情况下,才切换到该后端。MySQL协议首先进行握手。当…

    2022年6月6日
    42
  • CSDN社区分享面试经历活动作品21——这段时间的几个面试

    CSDN社区分享面试经历活动作品21——这段时间的几个面试泉州巴黎婚纱摄影店门口摆了个牌子,说招聘20名数码师,月薪2000-4000。又在网上也看到招聘启事,投了。投完,人才网收到个面试通知,不过简历状态竟然是未阅?通知人面试连简历都不看的?打了个电话过去,又给了我个电话,再打过去,电话里跟我说,我们这个职位啊,工作时间长工资低(6+*12+,过阵子在百度PS吧,看到有人发了一个贴,说他在河南安阳,看到当地最大

    2022年6月4日
    34
  • Java多线程设计模式:wait/notify机制

    Java多线程设计模式:wait/notify机制

    2021年5月6日
    124
  • JQuery部分内容整理

    JQuery部分内容整理

    2021年10月3日
    43
  • idea设置修改字体大小与样式【亲测好用】

    idea设置修改字体大小与样式【亲测好用】idea 设置修改字体大小与样式详细步骤 备注 不同 idea 版本设置方法类似 找到对应的面板设置即可第一步 点击工具栏最上方的 File 选项第二步 选择 Setting 选项第三步 选择 Appearance 选项 选择 size 设置自己喜欢的大小即可 我设置为 14 第四步 选择 Editor 选项中的 font 面板 同样找到 size 设置对应的大小 即可设置代码主窗口的字体大小 ide

    2026年3月19日
    3
  • Window基础(黑客基础)

    Window基础(黑客基础)一、Window重要目录1.ProgramData:C:\ProgramData是个公用的被创建文件夹或文件存放的地方,这些文件夹或文件仅由创建者完整控制。programdata是电脑C盘的一个系统文件夹2.ProgramFiles和ProgramFiles(86):程序软件默认安装目录,它们的区别是前者是安装64位软件,后者是安装32位软件3.Window:系统安装目录4….

    2022年5月2日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号