TuyaOS
lwipopts.h
浏览该文件的文档.
1
8#ifndef LWIP_HDR_LWIPOPTS_H
9#define LWIP_HDR_LWIPOPTS_H
10
11//TUYA 平台宏
12#include "tuya_iot_config.h"
13#include "tkl_system.h"
14
15
16/*
17 ----------------------------------------------
18 ---------- TUYA定制性能优化 options ----------
19 ----------------------------------------------
20*/
21//TCP头申请不到PBUF_RAM空间后,使用PBUF_POOL空间。打开该宏可能导致数据包丢包(一般驱动适配层用POOL)
22//#define LWIP_TCP_HEAD_ALLOC_REUSE_POLL 0
23
24/*
25tuya 线程的优先级功能,在应用发送消息后,会把当前应用的优先级升到最高,收到消息后再恢复到
26正常,用于加快应用速度。防止广播包过多的时候,TCPIP线程一直处理广播,应用层消息得不到处理。
27
28比如:涂鸦MCU仿真助手开开机的时候会发很多命令,会导致“__mq_ctrl_task”执行时间不足,recv得不
29到及时调度,导致发送失败。此时可以开启次功能,解决次问题,或在“sf_obj_dp_report_async”中加
30入“tuya_hal_system_sleep(100)”,减慢MCU仿真助手的调度频率,让mqtt线程可以及时调度。
31*/
32//#define LWIP_TUYA_APP_TCPIP_THREAD_SWITCH 1
33
34//#define IPEF_TEST_OPTIMIZE 0
35
36/*
37 ----------------------------------------------
38 --------------- 连接资源 options -------------
39 ----------------------------------------------
40*/
41//LWIP内核UDP个数
42//#define MEMP_NUM_UDP_PCB 6
43//LWIP内核已完成连接的活跃TCP个数
44//#define MEMP_NUM_TCP_PCB 10
45//LWIP内核处于listen状态的TCP个数
46//#define MEMP_NUM_TCP_PCB_LISTEN 5
47//NETCONN的个数,位于socket下一层
48//#define MEMP_NUM_NETCONN (MEMP_NUM_UDP_PCB+MEMP_NUM_TCP_PCB+MEMP_NUM_TCP_PCB_LISTEN)
49
50
51/*
52 ----------------------------------------------
53 ------------- 数据缓存资源 options -----------
54 ----------------------------------------------
55*/
56//数据包缓存大小,如果发送的数据较多,且发送速度较大,需要修改此值
57//#if IPEF_TEST_OPTIMIZE
58//#define MEM_SIZE (64*512)
59//#else
60//#define MEM_SIZE (48*512)
61//#endif
62
63
64//PBUF数据的缓存个数,所有数据包共用,如果发送的数据较多,且发送速度较大,需要修改此值
65//#define MEMP_NUM_PBUF 100
66
67//TCP发送缓存队列中TCP分配的个数
68//#define MEMP_NUM_TCP_SEG 20
69
70//数据包分片重组缓存个数
71//#define IP_REASS_MAX_PBUFS 10
72
73
74//POOL资源的个数,一般用在底层驱动收包
75//#define PBUF_POOL_SIZE (2*IP_REASS_MAX_PBUFS)
76//单个POOL池子的大小
77//#define PBUF_POOL_BUFSIZE 500
78//#define PBUF_LINK_ENCAPSULATION_HLEN 400
79
80//TCP发送缓存,单位字节
81//#define TCP_SND_BUF (5*TCP_MSS)
82
83//TCP发送缓存,单位个
84//#define TCP_SND_QUEUELEN (4*TCP_SND_BUF/TCP_MSS)
85
86//NETCON层接收数据包的缓存个数(UDP使用中,如果对端发送快于本地接收,这个缓存小会丢掉)
87//#define MEMP_NUM_NETBUF 8
88
89
90/*
91 ----------------------------------------------
92 ---------- 操作系统调度资源 options ----------
93 ----------------------------------------------
94*/
95//如果如果发送数据较多较快,需要加大以下的邮箱个数
96//TCPIP邮箱的深度
97//#define TCPIP_MBOX_SIZE 6
98//UDP接收邮箱深度
99//#define DEFAULT_UDP_RECVMBOX_SIZE 6
100//TCP接收邮箱深度
101//#define DEFAULT_TCP_RECVMBOX_SIZE 6
102//RAW接收邮箱深度
103//#define DEFAULT_RAW_RECVMBOX_SIZE 6
104//TCP accept邮箱深度
105//#define DEFAULT_ACCEPTMBOX_SIZE 6
106
107//LWIP定时器超时资源个数
108//#define MEMP_NUM_SYS_TIMEOUT 10
109
110
111
112/*
113 ----------------------------------------------
114 ------- TUYA固定业务(不需修改)options ------
115 ----------------------------------------------
116*/
117//TCPIP线程名字
118#define TCPIP_THREAD_NAME "TUYA_TCPIP"
119//是否给TCPIP线程加锁
120//#define LWIP_TCPIP_CORE_LOCKING 0
121//TCPIP线程是否支持超时
122#define LWIP_TCPIP_TIMEOUT 1
123
124//随机数生成,用于随机化TCP/UDP的端口号,保证每次开机后的端口号都不一样
125#define LWIP_RAND() tkl_system_get_random(0xFFFFFFFF)
126#define LWIP_SRAND()
127
128//其他线程大小,不需要关心
129#define DEFAULT_THREAD_STACKSIZE 500
130
131
132/* ---------- MTU options ---------- */
133#define LWIP_TUYA_MTU 1500
134
135/* ---------- TCP options ---------- */
136#define LWIP_TCP 1
137
138//是否支持KEEPALIVE保活
139#define LWIP_TCP_KEEPALIVE 1
140//发送超时
141//#define LWIP_SO_SNDTIMEO 1
142//接收超时
143//#define LWIP_SO_RCVTIMEO 1
144//TCP最大分片个数
145#define TCP_MSS (LWIP_TUYA_MTU - 40)
146//TCP窗口大小
147#define TCP_WND (5*TCP_MSS)
148
149/* ---------- EAPOL ---------------- */
150//#define LWIP_EAPOL_SUPPORT 1
151
152/* ---------- UDP options ---------- */
153#define LWIP_UDP 1
154
155/* ---------- ICMP options ---------- */
156#define LWIP_ICMP 1
157
158/* ---------- ARP options ----------- */
159#define LWIP_ARP 1
160
161/* ---------- DHCP options ---------- */
162#define LWIP_DHCP 1
163//tuya 这里由底层文件上提到该头文件,改为用户可配置
164#define DHCP_COARSE_TIMER_SECS 60
165//tuya 增加DHCP请求的seconds_elapsed,用于标记客户端首次向服务器发出请求后的时间,按照协议标准需要这么做(从rtk上移植)
166#define LWIP_DHCP_SECONDS_ELAPSE 1
167//DHCP请求transaction identifier 随机化
168#define DHCP_CREATE_RAND_XID 1
169
170
171/* ---------- DNS options ---------- */
172#define LWIP_DNS 1
173
174/* ---------- SO_REUSE options --------- */
175#define SO_REUSE 1
176
177/* Support Multicast */
178#define LWIP_IGMP 1
179
180/* ---------RAW option--------- */
181#define LWIP_RAW 1
182
183/* ---------IPv6 option--------- */
184//#define LWIP_IPV6 1
185
186#define LWIP_IPV6_DHCP6 LWIP_IPV6
187
188/* ---------Socket options ---------*/
189#define LWIP_SOCKET 1
190//tuya 立即发送RST断开连接
191//#define LWIP_SO_LINGER 1
192//tuya 是否不等待unsend和unacked,直接发送RST关闭连接,需要配合socket so_linger机制
193//#define LWIP_TUYA_SO_LINGER_RST 1
194//使用LWIP提供的errno值
195//#define LWIP_PROVIDE_ERRNO 1
196//socket号从1开始
197#define LWIP_SOCKET_OFFSET 1
198
199/* ---------Enable Netconn API--------- */
200#define LWIP_NETCONN 1
201
202/* ------initial port before dhcp------ */
203#define LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS 1
204
205/*
206 ----------------------------------------------
207 ----------------- 调试 options ---------------
208 ----------------------------------------------
209*/
210//tuya TUYA底层驱动数据包wireshark打印
211#define LWIP_TUYA_PACKET_PRINT 0
212
213
214//LWIP_DEBUG同时管理了LWIP_NOASSERT(没有断言)和LWIP_STATS,注释掉“#define LWIP_DEBUG”可以节约20K空间
215//#define LWIP_DEBUG 0
216// Debug Options
217#define NETIF_DEBUG LWIP_DBG_OFF
218#define PBUF_DEBUG LWIP_DBG_OFF
219#define API_LIB_DEBUG LWIP_DBG_OFF
220#define API_MSG_DEBUG LWIP_DBG_OFF
221#define SOCKETS_DEBUG LWIP_DBG_OFF
222#define ICMP_DEBUG LWIP_DBG_OFF
223#define IGMP_DEBUG LWIP_DBG_OFF
224#define INET_DEBUG LWIP_DBG_OFF
225#define IP_DEBUG LWIP_DBG_OFF
226#define IP_REASS_DEBUG LWIP_DBG_OFF
227#define RAW_DEBUG LWIP_DBG_OFF
228#define MEM_DEBUG LWIP_DBG_OFF
229#define MEMP_DEBUG LWIP_DBG_OFF
230#define SYS_DEBUG LWIP_DBG_OFF
231#define TIMERS_DEBUG LWIP_DBG_OFF
232#define TCP_DEBUG LWIP_DBG_OFF
233#define TCP_INPUT_DEBUG LWIP_DBG_OFF
234#define TCP_FR_DEBUG LWIP_DBG_OFF
235#define TCP_RTO_DEBUG LWIP_DBG_OFF
236#define TCP_CWND_DEBUG LWIP_DBG_OFF
237#define TCP_WND_DEBUG LWIP_DBG_OFF
238#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF
239#define TCP_RST_DEBUG LWIP_DBG_OFF
240#define TCP_QLEN_DEBUG LWIP_DBG_OFF
241#define UDP_DEBUG LWIP_DBG_OFF
242#define TCPIP_DEBUG LWIP_DBG_OFF
243#define SLIP_DEBUG LWIP_DBG_OFF
244#define DHCP_DEBUG LWIP_DBG_OFF
245#define AUTOIP_DEBUG LWIP_DBG_OFF
246#define DNS_DEBUG LWIP_DBG_OFF
247#define IP6_DEBUG LWIP_DBG_OFF
248
249#define ETHARP_DEBUG LWIP_DBG_OFF
250#define UDP_LPC_EMAC LWIP_DBG_OFF
251#define ETHEAPOL_DEBUG LWIP_DBG_ON
252
253
254#ifdef LWIP_DEBUG
255#define MEMP_OVERFLOW_CHECK 1
256#define MEMP_SANITY_CHECK 1
257#define LWIP_DBG_TYPES_ON LWIP_DBG_ON
258#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_ALL
259#else
260//tuya 8720cf如果需要用到断言的话,需要去掉"cc.h"中的"#define LWIP_PLATFORM_ASSERT(x) //do { if(!(x)) while(1); } while(0)"
261#define LWIP_NOASSERT 0
262#define LWIP_STATS 0
263#endif
264
265//用于TUYA平台导入测试计数,用于监控状态
266#if LWIP_STATS
267//TCPIP线程统计计数需要用更大的线程
268#define TCPIP_THREAD_STACKSIZE (4096*2)
269
270#define LINK_STATS 1
271#define ETHARP_STATS 1
272#define IP_STATS 1
273#define IPFRAG_STATS 1
274#define ICMP_STATS 1
275#define IGMP_STATS 1
276#define UDP_STATS 1
277#define TCP_STATS 1
278#define MEM_STATS 1
279#define MEMP_STATS 1
280#define SYS_STATS 1
281#define LWIP_STATS_DISPLAY 1
282#define IP6_STATS 1
283#define ICMP6_STATS 1
284#define IP6_FRAG_STATS 1
285#define MLD6_STATS 1
286#define ND6_STATS 1
287#define MIB2_STATS 1
288#define MIB2_STATS 1
289
290//TUYA网口层监控函数,需要在驱动层适配
291#define TUYA_ETHERNETIF_STATS 1
292#endif
293
294
295/*
296 ----------------------------------------------
297 --------------- LWIP 内部头文件 --------------
298 ----------------------------------------------
299*/
300#include "lwip/init.h"
301
302
303/*
304 ----------------------------------------------
305 -------------- 原厂适配 options --------------
306 ----------------------------------------------
307*/
308//TCPIP线程的大小
309//#define TCPIP_THREAD_STACKSIZE (1024*4)
310//TCPIP线程的优先级,此处的“11”来源于freertos的configMAX_PRIORITIES,由于SDK不能包含操作系统,此处用数值代替
311//#define TCPIP_THREAD_PRIO (11 - 2)
312
313//DHCP CLIENT线程的大小
314//#define DHCPC_THREAD_STACKSIZE (1024*2)
315
316//DHCP CLIENT线程优先级
317//#define DHCPC_THREAD_PRIO 5
318
319//使用信号量代替锁
320#define LWIP_COMPAT_MUTEX 1
321
322//字节对齐方式
323#define MEM_ALIGNMENT 4
324
325#define LWIP_CHKSUM_ALGORITHM 3
326
327#define LWIP_NETIF_API 1
328
329//#define LWIP_TX_PBUF_ZERO_COPY 1
330
331//#define LWIP_DHCP_CHECK_LINK_UP 0
332
333//#define CONFIG_TUYA_SOCK_SHIM 1
334
335//#define LWIP_NETIF_HOSTNAME 1
336
337//#define LWIP_CHKSUM(buf, len) tkl_ethernetif_ip_chksum(buf, len)
338
339#define LWIP_HOOK_IP4_ROUTE_SRC(s, d) (void *)ip4_route_src_hook(s, d)
340
341#define LWIP_DHCP_DISCOVER_RETRY_INTERVAL_1S 1
342
343//#define SOCK_API_SYNC 1
344
345//#define LWIP_NETCONN_SEM_PER_THREAD 1
346
347#define MEMP_MEM_MALLOC 1
348
349//#define LWIP_DHCPC_STATIC_IPADDR_ENABLE 0
350
351#define LWIP_CONFIG_FAST_DHCP 1
352
353#endif /* LWIP_HDR_LWIPOPTS_H */