uIP编译时配置选项

来源:互联网 发布:php招聘 编辑:程序博客网 时间:2024/04/30 13:23

详细说明: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行.



30. void uip_log ( char * msg )
打印uip日志信息.
此函数必须为使用uIP的模块实现,uIP每产生一条日志信息就会调用一次这个函数.

0 0
原创粉丝点击