Skip to content

Commit de1fd2b

Browse files
author
liuxianliang
committed
[add] lwIP 2.1.2 transplantation on RT-Thread.
Signed-off-by: liuxianliang <[email protected]>
1 parent a9796b9 commit de1fd2b

File tree

16 files changed

+3531
-2
lines changed

16 files changed

+3531
-2
lines changed

components/net/Kconfig

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,13 @@ config RT_USING_LWIP
120120

121121
config RT_USING_LWIP210
122122
bool "lwIP v2.1.0"
123+
124+
config RT_USING_LWIP212
125+
bool "lwIP v2.1.2"
126+
123127
endchoice
124128

125-
if (RT_USING_LWIP210 || RT_USING_LWIP202)
129+
if (RT_USING_LWIP210 || RT_USING_LWIP202 || RT_USING_LWIP212)
126130
config RT_USING_LWIP_IPV6
127131
bool "IPV6 protocol"
128132
default n

components/net/SConscript

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ cwd = GetCurrentDir()
88
list = os.listdir(cwd)
99

1010
# the default version of LWIP is 2.0.2
11-
if not GetDepend('RT_USING_LWIP141') and not GetDepend('RT_USING_LWIP202') and not GetDepend('RT_USING_LWIP210'):
11+
if not GetDepend('RT_USING_LWIP141') and not GetDepend('RT_USING_LWIP202') and not GetDepend('RT_USING_LWIP210') and not GetDepend('RT_USING_LWIP212'):
1212
AddDepend('RT_USING_LWIP202')
1313

1414
for d in list:
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# lwip 移植说明
2+
3+
为了适配 RT-Thread 网卡设备,RT-Thread 团队基于原 [lwip](http://savannah.nongnu.org/projects/lwip/) 进行了一些修改,本文档记录了相关修改内容。
4+
5+
> 本 lwip-2.1.2 版本基于 [lwip STABLE-2_1_2_RELEASE](https://git.savannah.gnu.org/git/lwip.git) 版本移植而来。
6+
7+
8+
| Date | Author | Notes |
9+
| :---- | :---- | :---- |
10+
| 2019-09-02 | MurphyZhao | 增加 lwip 2.1.2 移植说明 |
11+
| 2020-06-18 | xiangxistu | 增加部分 lwIP 2.1.2 移植说明 |
12+
13+
## 修改内容
14+
15+
### src/api
16+
17+
- `src/api/sockets.c` 增加 `lwip_tryget_socket` 函数,作为 `tryget_socket` 函数的全局实现
18+
- `src/api/sockets.c``alloc_socket` 函数中,增加 SAL 移植函数 `rt_wqueue_init`
19+
20+
```
21+
#ifdef SAL_USING_POSIX
22+
rt_wqueue_init(&sockets[i].wait_head);
23+
#endif
24+
```
25+
26+
### src/app
27+
28+
- 增加 `ping/ping.c`,便于在 finsh/msh 中使用 ping 功能
29+
- 增加 `tftp/tftp_port.c`,便于在 finsh/msh 中使用 tftp_server 功能
30+
31+
### src/arch
32+
33+
增加 `src/arch` 目录,存储对接 RT-Thread 设备框架的移植文件,从 lwip-2.0.2 版本中的移植文件修改而来。
34+
35+
36+
37+
以及相对于 lwIP2.0.2 的增加修改内容:
38+
39+
40+
*`src/arch/sys_arch.c` 中增加 MTU 与 etharp_output 的初始化
41+
42+
*`src/arch/sys_arch.c` 中增加新添加的邮箱函数
43+
44+
对邮箱机制的新增加的 sys_mbox_trypost_fromisr 函数予以实现
45+
46+
*`src/arch/sys_arch.c` 中增加新添加的内存堆函数
47+
48+
对内存堆的新增加的 mem_overflow_check_raw 与 mem_overflow_init_raw 函数予以实现
49+
50+
*`src/arch/cc.h` 中增加对 lwIP 使用的标准错误代码宏的处理,不再使用 lwIP 内置的错误宏
51+
52+
53+
### src/core
54+
55+
-`src/core/dns.c``dns_setserver` 函数中增加 RT-Thread netdev 相关的移植
56+
-`src/core/netif.c` 中增加 RT-Thread netdev 相关的移植
57+
58+
### src/include
59+
60+
-`src/include/lwip/priv/sockets_priv.h` 中增加 SAL 相关的移植
61+
62+
`lwip_sock` 结构体中增加 ` rt_wqueue_t wait_head;` 成员
63+
64+
-`src/include/lwip/prot/ieee.h` 中增加 EAPOL, EAP over LAN 标识
65+
66+
-`src/include/lwip/init.h` 中的版本号后增加 `U` 标识
67+
68+
-`src/include/lwip/sockets.h` 中增加 `LWIP_SOCKET_SELECT`,解决开启 RT_USING_POSIX 时的冲突
69+
70+
-`src/include/lwip/arch.h` 中修改 `<unistd.h> ``"sys/types.h" `,解决编译冲突
71+
72+
并添加 typedef int ssize_t 定义,补足因 libc 与 dfs 未开启时 ssize_t 的定义不足问题
73+
74+
-`src/include/netif/` 中增加 `ethernetif.h`,用于对接 RT-Thread 网卡设备
75+
76+
### src/netif
77+
78+
-`src/netif/` 中增加 `ethernetif.c`,用于对接 RT-Thread 网卡设备
79+
-`src/netif/lowpan6.c` 中增加 `LWIP_6LOWPAN` 宏定义,以防止编译错误
80+
81+
### src
82+
83+
- 在 src 目录下,增加 `src/lwipopts.h`,用于 lwip 功能裁剪以及配置设置
84+
- 在 src 目录下,增加 `src/lwippools.h`,用于定义 `LWIP_MALLOC_MEMPOOL`
85+
86+
### 其它
87+
88+
- 增加 SConscript 文件,用于 scons 构建
89+
- 增加 README_RT-THREAD.md 文件,用于记录相对原 lwip 源码的改动
Lines changed: 265 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,265 @@
1+
from building import *
2+
3+
# get current directory
4+
cwd = GetCurrentDir()
5+
6+
# 1. The minimum set of files needed for lwIP.
7+
lwipcore_SRCS = Split("""
8+
src/core/init.c
9+
src/core/def.c
10+
src/core/dns.c
11+
src/core/inet_chksum.c
12+
src/core/ip.c
13+
src/core/memp.c
14+
src/core/netif.c
15+
src/core/pbuf.c
16+
src/core/raw.c
17+
src/core/stats.c
18+
src/core/sys.c
19+
src/core/tcp.c
20+
src/core/tcp_in.c
21+
src/core/tcp_out.c
22+
src/core/timeouts.c
23+
src/core/udp.c
24+
""")
25+
26+
# 1.1
27+
lwipcore_altcp_SRCS = Split("""
28+
src/core/altcp.c
29+
src/core/altcp_alloc.c
30+
src/core/altcp_tcp.c
31+
""")
32+
33+
# 1.2
34+
lwipcore4_SRCS = Split("""
35+
src/core/ipv4/autoip.c
36+
src/core/ipv4/dhcp.c
37+
src/core/ipv4/etharp.c
38+
src/core/ipv4/icmp.c
39+
src/core/ipv4/igmp.c
40+
src/core/ipv4/ip4_frag.c
41+
src/core/ipv4/ip4.c
42+
src/core/ipv4/ip4_addr.c
43+
""")
44+
45+
# 1.3
46+
lwipcore6_SRCS = Split("""
47+
src/core/ipv6/dhcp6.c
48+
src/core/ipv6/ethip6.c
49+
src/core/ipv6/icmp6.c
50+
src/core/ipv6/inet6.c
51+
src/core/ipv6/ip6.c
52+
src/core/ipv6/ip6_addr.c
53+
src/core/ipv6/ip6_frag.c
54+
src/core/ipv6/mld6.c
55+
src/core/ipv6/nd6.c
56+
""")
57+
58+
# 2. APIFILES: The files which implement the sequential and socket APIs.
59+
lwipapi_SRCS = Split("""
60+
src/api/api_lib.c
61+
src/api/api_msg.c
62+
src/api/err.c
63+
src/api/if_api.c
64+
src/api/netbuf.c
65+
src/api/netdb.c
66+
src/api/netifapi.c
67+
src/api/sockets.c
68+
src/api/tcpip.c
69+
""")
70+
71+
# 3. Files implementing various generic network interface functions
72+
lwipnetif_SRCS = Split("""
73+
src/netif/ethernet.c
74+
src/netif/ethernetif.c
75+
""")
76+
77+
# 3.1 Files implementing an IEEE 802.1D bridge by using a multilayer netif approach
78+
lwipnetif_bridgeif_SRCS = Split("""
79+
src/netif/bridgeif.c
80+
src/netif/bridgeif_fdb.c
81+
""")
82+
83+
# 3.2 A generic implementation of the SLIP (Serial Line IP) protocol.
84+
lwipnetif_slipif_SRCS = Split("""
85+
src/netif/slipif.c
86+
""")
87+
88+
# 4. 6LoWPAN
89+
lwipsixlowpan_SRCS = Split("""
90+
src/netif/lowpan6.c
91+
""")
92+
93+
# 4.1 A 6LoWPAN over Bluetooth Low Energy (BLE) implementation as netif,
94+
# according to RFC-7668.
95+
lwipsixlowpan_ble_SRCS = Split("""
96+
src/netif/lowpan6_ble.c
97+
""")
98+
99+
# 4.2 Common 6LowPAN routines for IPv6.
100+
lwipsixlowpan_ipv6_SRCS = Split("""
101+
src/netif/lowpan6_common.c
102+
""")
103+
104+
# 4.3 A netif implementing the ZigBee Encapsulation Protocol (ZEP).
105+
lwipsixlowpan_zep_SRCS = Split("""
106+
src/netif/zepif.c
107+
""")
108+
109+
# 5. PPP
110+
lwipppp_SRCS = Split("""
111+
src/netif/ppp/auth.c
112+
src/netif/ppp/ccp.c
113+
src/netif/ppp/chap-md5.c
114+
src/netif/ppp/chap_ms.c
115+
src/netif/ppp/chap-new.c
116+
src/netif/ppp/demand.c
117+
src/netif/ppp/eap.c
118+
src/netif/ppp/ecp.c
119+
src/netif/ppp/eui64.c
120+
src/netif/ppp/fsm.c
121+
src/netif/ppp/ipcp.c
122+
src/netif/ppp/ipv6cp.c
123+
src/netif/ppp/lcp.c
124+
src/netif/ppp/magic.c
125+
src/netif/ppp/mppe.c
126+
src/netif/ppp/multilink.c
127+
src/netif/ppp/ppp.c
128+
src/netif/ppp/pppapi.c
129+
src/netif/ppp/pppcrypt.c
130+
src/netif/ppp/pppoe.c
131+
src/netif/ppp/pppol2tp.c
132+
src/netif/ppp/pppos.c
133+
src/netif/ppp/upap.c
134+
src/netif/ppp/utils.c
135+
src/netif/ppp/vj.c
136+
src/netif/ppp/polarssl/arc4.c
137+
src/netif/ppp/polarssl/des.c
138+
src/netif/ppp/polarssl/md4.c
139+
src/netif/ppp/polarssl/md5.c
140+
src/netif/ppp/polarssl/sha1.c
141+
""")
142+
143+
# 6. SNMPv3 agent
144+
lwipsnmp_SRCS = Split("""
145+
src/apps/snmp/snmp_asn1.c
146+
src/apps/snmp/snmp_core.c
147+
src/apps/snmp/snmp_mib2.c
148+
src/apps/snmp/snmp_mib2_icmp.c
149+
src/apps/snmp/snmp_mib2_interfaces.c
150+
src/apps/snmp/snmp_mib2_ip.c
151+
src/apps/snmp/snmp_mib2_snmp.c
152+
src/apps/snmp/snmp_mib2_system.c
153+
src/apps/snmp/snmp_mib2_tcp.c
154+
src/apps/snmp/snmp_mib2_udp.c
155+
src/apps/snmp/snmp_snmpv2_framework.c
156+
src/apps/snmp/snmp_snmpv2_usm.c
157+
src/apps/snmp/snmp_msg.c
158+
src/apps/snmp/snmpv3.c
159+
src/apps/snmp/snmp_netconn.c
160+
src/apps/snmp/snmp_pbuf_stream.c
161+
src/apps/snmp/snmp_raw.c
162+
src/apps/snmp/snmp_scalar.c
163+
src/apps/snmp/snmp_table.c
164+
src/apps/snmp/snmp_threadsync.c
165+
src/apps/snmp/snmp_traps.c
166+
""")
167+
168+
# 7. HTTP server + client
169+
lwiphttp_SRCS = Split("""
170+
src/apps/http/altcp_proxyconnect.c
171+
src/apps/http/fs.c
172+
src/apps/http/http_client.c
173+
src/apps/http/httpd.c
174+
""")
175+
176+
# 8. MAKEFSDATA HTTP server host utility
177+
lwipmakefsdata_SRCS = Split("""
178+
src/apps/http/makefsdata/makefsdata.c
179+
""")
180+
181+
# 9. IPERF server
182+
lwipiperf_SRCS = Split("""
183+
src/apps/lwiperf/lwiperf.c
184+
""")
185+
186+
# 10. SMTP client
187+
lwipsmtp_SRCS = Split("""
188+
src/apps/smtp/smtp.c
189+
""")
190+
191+
# 11. SNTP client
192+
lwipsntp_SRCS = Split("""
193+
src/apps/sntp/sntp.c
194+
""")
195+
196+
# 12. MDNS responder
197+
lwipmdns_SRCS = Split("""
198+
src/apps/mdns/mdns.c
199+
""")
200+
201+
# 13. NetBIOS name server
202+
lwipnetbios_SRCS = Split("""
203+
src/apps/netbiosns/netbiosns.c
204+
""")
205+
206+
# 14. TFTP server files
207+
lwiptftp_SRCS = Split("""
208+
src/apps/tftp/tftp_server.c
209+
src/apps/tftp/tftp_port.c
210+
""")
211+
212+
# 15. MQTT client files
213+
lwipmqtt_SRCS = Split("""
214+
src/apps/mqtt/mqtt.c
215+
""")
216+
217+
# 16. ARM MBEDTLS related files of lwIP rep
218+
lwipmbedtls_SRCS = Split("""
219+
src/apps/altcp_tls/altcp_tls_mbedtls.c
220+
src/apps/altcp_tls/altcp_tls_mbedtls_mem.c
221+
src/apps/snmp/snmpv3_mbedtls.c
222+
""")
223+
224+
# 17. ping
225+
lwipping_SRCS = Split("""
226+
src/apps/ping/ping.c
227+
""")
228+
229+
src = Split("""
230+
src/arch/sys_arch.c
231+
""")
232+
233+
src += lwipcore_SRCS # rm mem.c
234+
src += lwipcore_altcp_SRCS
235+
src += lwipapi_SRCS
236+
src += lwipnetif_SRCS
237+
src += lwipsixlowpan_SRCS
238+
239+
src += lwipcore4_SRCS
240+
241+
path = [cwd + '/src',
242+
cwd + '/src/include',
243+
cwd + '/src/arch/include',
244+
cwd + '/src/include/netif']
245+
246+
if not GetDepend('RT_USING_SAL'):
247+
path += [cwd + '/src/include/compat/posix']
248+
249+
if GetDepend(['RT_LWIP_SNMP']):
250+
src += lwipsnmp_SRCS
251+
path += [cwd + '/src/apps/snmp']
252+
253+
if GetDepend(['RT_LWIP_PPP']):
254+
src += lwipppp_SRCS
255+
path += [cwd + '/src/netif/ppp']
256+
257+
if GetDepend(['RT_USING_LWIP_IPV6']):
258+
src += lwipcore6_SRCS
259+
260+
if GetDepend(['RT_LWIP_USING_PING']):
261+
src += lwipping_SRCS
262+
263+
group = DefineGroup('lwIP', src, depend = ['RT_USING_LWIP', 'RT_USING_LWIP212'], CPPPATH = path)
264+
265+
Return('group')

0 commit comments

Comments
 (0)