uIP宏定义的详细配置
轉自Jkf40622的微博。地址http://m.blog.csdn.net/article/details?id=49490331
詳細說明: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多時小端的,然而最著名的例外就是motorola的CPU.它是大端的.應根據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.h的156行.
17.?#define?UIP_RECEIVE_WINDOW
通告的接收器窗口.
如果處理器對輸入數據處理能力較慢,則應設得低些(uip_buf的大小),否則應設得高些(32768字節).
定義于uipopt.h的317行.
18.?#define?UIP_RTO?3
以時鐘脈沖計算的重傳超時計數.
此項不應改變.
定義于uipopt.h的280行.
引用于uip_process().
19.?#define?UIP_STATISTICS
決定是否將統計功能加入編譯.
統計功能對于調試和顯示用戶是非常有幫助的.
定義于uipopt.h的393行.
20.?#define?UIP_TCP_MSS?(UIP_BUFSIZE?-?UIP_LLH_LEN?-?UIP_TCPIP_HLEN)
TCP最大數據段大小.
此值不應大于UIP_BUFSIZE?-?UIP_LLH_LEN?-?UIP_TCPIP_HLEN.
定義于uipopt.h的305行.
21.?#define?UIP_TIME_WAIT_TIMEOUT?120一個連接應該停留在TIME_WAIT狀態的最長時間.
此配置選項沒有真正的實現,所以不應理會.
定義于uipopt.h的328行.
引用于uip_process().
22.?#define?UIP_TTL?64
uip發送的IP包的生存時間(TTL)
通常此項不應更改.
定義于uipopt.h的141行.
23.?#define?UIP_UDP_CHECKSUMS
是否使用UDP校驗和.
注意:
對UDP校驗和的支持目前并不包含于uIP,故此項無用.
定義于uipopt.h的195行.
24.?#define?UIP_URGDATA
TCP緊迫數據通告功能是否編譯.
緊迫數據(帶外數據)在TCP中很少用到,?所以很少需要.
定義于uipopt.h的273行.
25.?typedef?uint16_t?u16_t
16位數據類型.
這個類型定義定義了通貫uip所使用的16位數據類型.
應用例程:
dhcpc.c,?dhcpc.h,?resolv.c,?resolv.h,?smtp.c,?smtp.h,?telnetd.c,?and?uip-conf.h.
定義于uip-conf.h的76行.
26.?typedef?uint8_t?u8_t8位數據類型.
此類型定義定義了通貫uIP中使用的8位數據類型.
應用例程:
dhcpc.c,?dhcpc.h,?resolv.c,smtp.h,?telnetd.c,?telnetd.h,?and?uip-conf.h.
定義于uip-conf.h的67行.
27.?typedef?unsigned?short?uip_stats_t
統計數據類型.
此類型定義定義了通貫uIP使用的統計數據類型.
定義于uip-conf.h的86行.
28.?typedef?uip_tcp_appstate_t
此種類型的應用狀態將會被存儲于uip_conn結構中.
它通常被typedef為一種保存應用狀態信息的結構.
應用例程:
smtp.h,?telnetd.h,?and?webclient.h.
定義于smtp.h的98行.
29.?typedef?uip_udp_appstate_t
此種類型的應用狀態將會被存儲于uip_conn結構中.
它通常被typedef為一種保存應用狀態信息的結構.
應用例程:
dhcpc.h.
定義于resolv.h的47行.
總結
以上是生活随笔為你收集整理的uIP宏定义的详细配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 获取uuid方法
- 下一篇: Wingdings 2 符号编码对照表