Updated Apr 2025
FreeRTOS-Plus-TCP
Open source and thread safe TCP/IP stack for FreeRTOS
FreeRTOS-Plus-TCP is a scalable, open source and thread safe TCP/IP stack for FreeRTOS.
FreeRTOS-Plus-TCP provides a familiar and standards based Berkeley sockets interface, making it as simple to use and as quick to learn as possible. An alternative callback interface is also available for advanced users.
FreeRTOS-Plus-TCP's features and RAM footprint are fully scalable, making FreeRTOS-Plus-TCP equally applicable to smaller lower throughput microcontrollers as larger higher throughput microprocessors.
See the FreeRTOS-Plus-TCP section in the tree menu (on the left) for a FreeRTOS-Plus-TCP networking tutorial, porting guide, API documentation, and a link to the free TCP/IP source code download.
Filezilla FTP'ing large and small files to a 66MHz MCU running FreeRTOS-Plus-TCP and FreeRTOS-Plus-FAT
Features
- Berkeley sockets API
- Optionally supports TCP sliding windows
- Fully re-entrant and thread safe API
- Includes ARP, DHCP, DNS, LLMNR, NBNS, RA, ND, ICMP, and ICMPv6
- Gratuitous ARPs
- Static, DHCP and Auto-IP address assignment
- Can also be used as a UDP only stack
- Optionally callback interface
- Optionally fragment outgoing packets
Berkeley Sockets API
- FreeRTOS_socket()
- FreeRTOS_setsockopt()
- FreeRTOS_bind()
- FreeRTOS_listen()
- FreeRTOS_connect()
- FreeRTOS_accept()
- FreeRTOS_send() / FreeRTOS_sendto()
- FreeRTOS_recv() / FreeRTOS_recvfrom()
- etc.
FreeRTOS-Plus-TCP Supports the following build combinations, (by default IPv4, IPv6 and TCP are enabled):
Build combination | ipconfigUSE_IPv4 | ipconfigUSE_IPv6 | ipconfigUSE_TCP |
---|---|---|---|
IPv4 + UDP | 1 | 0 | 0 |
IPv4 + UDP + TCP | 1 | 0 | 1 |
IPv6 + UDP | 0 | 1 | 0 |
IPv6 + UDP + TCP | 0 | 1 | 1 |
IPv4 + IPv6 + UDP | 1 | 1 | 0 |
IPv4 + IPv6 + UDP + TCP | 1 | 1 | 1 |
Code Size (example generated with GCC for ARM Cortex-M) with IPv4 & IPv6 Enabled
GCC ARM
| GCC ARM
| ||
---|---|---|---|
File | Size | File | Size |
FreeRTOS_ARP.c | 2400 | FreeRTOS_ARP.c | 2094 |
FreeRTOS_BitConfig.c | 452 | FreeRTOS_BitConfig.c | 400 |
FreeRTOS_DHCP.c | 2689 | FreeRTOS_DHCP.c | 2359 |
FreeRTOS_DHCPv6.c | 2934 | FreeRTOS_DHCPv6.c | 2676 |
FreeRTOS_DNS.c | 1463 | FreeRTOS_DNS.c | 1309 |
FreeRTOS_DNS_Cache.c | 980 | FreeRTOS_DNS_Cache.c | 860 |
FreeRTOS_DNS_Callback.c | 408 | FreeRTOS_DNS_Callback.c | 396 |
FreeRTOS_DNS_Networking.c | 188 | FreeRTOS_DNS_Networking.c | 178 |
FreeRTOS_DNS_Parser.c | 910 | FreeRTOS_DNS_Parser.c | 782 |
FreeRTOS_ICMP.c | 80 | FreeRTOS_ICMP.c | 78 |
FreeRTOS_IP.c | 2584 | FreeRTOS_IP.c | 2366 |
FreeRTOS_IP_Timers.c | 756 | FreeRTOS_IP_Timers.c | 682 |
FreeRTOS_IP_Utils.c | 2495 | FreeRTOS_IP_Utils.c | 2177 |
FreeRTOS_IPv4.c | 296 | FreeRTOS_IPv4.c | 208 |
FreeRTOS_IPv4_Sockets.c | 292 | FreeRTOS_IPv4_Sockets.c | 190 |
FreeRTOS_IPv4_Utils.c | 180 | FreeRTOS_IPv4_Utils.c | 134 |
FreeRTOS_IPv6.c | 790 | FreeRTOS_IPv6.c | 644 |
FreeRTOS_IPv6_Sockets.c | 885 | FreeRTOS_IPv6_Sockets.c | 769 |
FreeRTOS_IPv6_Utils.c | 290 | FreeRTOS_IPv6_Utils.c | 292 |
FreeRTOS_ND.c | 1850 | FreeRTOS_ND.c | 1704 |
FreeRTOS_RA.c | 1228 | FreeRTOS_RA.c | 1022 |
FreeRTOS_Routing.c | 1739 | FreeRTOS_Routing.c | 1559 |
FreeRTOS_Sockets.c | 7272 | FreeRTOS_Sockets.c | 6206 |
FreeRTOS_Stream_Buffer.c | 498 | FreeRTOS_Stream_Buffer.c | 424 |
FreeRTOS_TCP_IP.c | 1186 | FreeRTOS_TCP_IP.c | 942 |
FreeRTOS_TCP_IP_IPV4.c | 608 | FreeRTOS_TCP_IP_IPV4.c | 430 |
FreeRTOS_TCP_IP_IPV6.c | 614 | FreeRTOS_TCP_IP_IPV6.c | 482 |
FreeRTOS_TCP_Reception.c | 832 | FreeRTOS_TCP_Reception.c | 678 |
FreeRTOS_TCP_State_Handling.c | 1690 | FreeRTOS_TCP_State_Handling.c | 1464 |
FreeRTOS_TCP_State_Handling_IPV4.c | 276 | FreeRTOS_TCP_State_Handling_IPV4.c | 224 |
FreeRTOS_TCP_State_Handling_IPV6.c | 304 | FreeRTOS_TCP_State_Handling_IPV6.c | 256 |
FreeRTOS_TCP_Transmission.c | 1866 | FreeRTOS_TCP_Transmission.c | 1636 |
FreeRTOS_TCP_Transmission_IPV4.c | 788 | FreeRTOS_TCP_Transmission_IPV4.c | 658 |
FreeRTOS_TCP_Transmission_IPV6.c | 996 | FreeRTOS_TCP_Transmission_IPV6.c | 918 |
FreeRTOS_TCP_Utils.c | 22 | FreeRTOS_TCP_Utils.c | 14 |
FreeRTOS_TCP_Utils_IPV4.c | 72 | FreeRTOS_TCP_Utils_IPV4.c | 46 |
FreeRTOS_TCP_Utils_IPV6.c | 50 | FreeRTOS_TCP_Utils_IPV6.c | 48 |
FreeRTOS_TCP_WIN.c | 2086 | FreeRTOS_TCP_WIN.c | 1768 |
FreeRTOS_Tiny_TCP.c | 302 | FreeRTOS_Tiny_TCP.c | 290 |
FreeRTOS_UDP_IP.c | 116 | FreeRTOS_UDP_IP.c | 112 |
FreeRTOS_UDP_IPv4.c | 620 | FreeRTOS_UDP_IPv4.c | 548 |
FreeRTOS_UDP_IPv6.c | 756 | FreeRTOS_UDP_IPv6.c | 656 |
Total | 46843 | Total | 40679 |
Code Size (example generated with GCC for ARM Cortex-M) with only IPv4 Enabled
GCC ARM
| GCC ARM
| ||
---|---|---|---|
File | Size | File | Size |
FreeRTOS_ARP.c | 2282 | FreeRTOS_ARP.c | 1990 |
FreeRTOS_BitConfig.c | 452 | FreeRTOS_BitConfig.c | 400 |
FreeRTOS_DHCP.c | 2613 | FreeRTOS_DHCP.c | 2293 |
FreeRTOS_DNS.c | 1225 | FreeRTOS_DNS.c | 1005 |
FreeRTOS_DNS_Cache.c | 856 | FreeRTOS_DNS_Cache.c | 734 |
FreeRTOS_DNS_Callback.c | 408 | FreeRTOS_DNS_Callback.c | 396 |
FreeRTOS_DNS_Networking.c | 188 | FreeRTOS_DNS_Networking.c | 178 |
FreeRTOS_DNS_Parser.c | 910 | FreeRTOS_DNS_Parser.c | 782 |
FreeRTOS_ICMP.c | 80 | FreeRTOS_ICMP.c | 78 |
FreeRTOS_IP.c | 2316 | FreeRTOS_IP.c | 2108 |
FreeRTOS_IP_Timers.c | 734 | FreeRTOS_IP_Timers.c | 656 |
FreeRTOS_IP_Utils.c | 2243 | FreeRTOS_IP_Utils.c | 1981 |
FreeRTOS_IPv4.c | 296 | FreeRTOS_IPv4.c | 208 |
FreeRTOS_IPv4_Sockets.c | 292 | FreeRTOS_IPv4_Sockets.c | 190 |
FreeRTOS_IPv4_Utils.c | 180 | FreeRTOS_IPv4_Utils.c | 134 |
FreeRTOS_Routing.c | 1183 | FreeRTOS_Routing.c | 1019 |
FreeRTOS_Sockets.c | 6914 | FreeRTOS_Sockets.c | 5856 |
FreeRTOS_Stream_Buffer.c | 498 | FreeRTOS_Stream_Buffer.c | 424 |
FreeRTOS_TCP_IP.c | 1172 | FreeRTOS_TCP_IP.c | 930 |
FreeRTOS_TCP_IP_IPV4.c | 608 | FreeRTOS_TCP_IP_IPV4.c | 430 |
FreeRTOS_TCP_Reception.c | 808 | FreeRTOS_TCP_Reception.c | 658 |
FreeRTOS_TCP_State_Handling.c | 1676 | FreeRTOS_TCP_State_Handling.c | 1448 |
FreeRTOS_TCP_State_Handling_IPV4.c | 276 | FreeRTOS_TCP_State_Handling_IPV4.c | 224 |
FreeRTOS_TCP_Transmission.c | 1788 | FreeRTOS_TCP_Transmission.c | 1548 |
FreeRTOS_TCP_Transmission_IPV4.c | 784 | FreeRTOS_TCP_Transmission_IPV4.c | 650 |
FreeRTOS_TCP_Utils.c | 18 | FreeRTOS_TCP_Utils.c | 12 |
FreeRTOS_TCP_Utils_IPV4.c | 72 | FreeRTOS_TCP_Utils_IPV4.c | 46 |
FreeRTOS_TCP_WIN.c | 2086 | FreeRTOS_TCP_WIN.c | 1768 |
FreeRTOS_Tiny_TCP.c | 302 | FreeRTOS_Tiny_TCP.c | 290 |
FreeRTOS_UDP_IP.c | 82 | FreeRTOS_UDP_IP.c | 72 |
FreeRTOS_UDP_IPv4.c | 616 | FreeRTOS_UDP_IPv4.c | 544 |
Total | 33958 | Total | 29052 |
Code Size (example generated with GCC for ARM Cortex-M) with only IPv6 Enabled
GCC ARM
| GCC ARM
| ||
---|---|---|---|
File | Size | File | Size |
FreeRTOS_ARP.c | 1294 | FreeRTOS_ARP.c | 1090 |
FreeRTOS_BitConfig.c | 452 | FreeRTOS_BitConfig.c | 400 |
FreeRTOS_DHCPv6.c | 2934 | FreeRTOS_DHCPv6.c | 2676 |
FreeRTOS_ICMP.c | 80 | FreeRTOS_ICMP.c | 78 |
FreeRTOS_IP.c | 2274 | FreeRTOS_IP.c | 2082 |
FreeRTOS_IP_Timers.c | 648 | FreeRTOS_IP_Timers.c | 590 |
FreeRTOS_IP_Utils.c | 2411 | FreeRTOS_IP_Utils.c | 2095 |
FreeRTOS_IPv6.c | 790 | FreeRTOS_IPv6.c | 644 |
FreeRTOS_IPv6_Sockets.c | 885 | FreeRTOS_IPv6_Sockets.c | 769 |
FreeRTOS_IPv6_Utils.c | 290 | FreeRTOS_IPv6_Utils.c | 292 |
FreeRTOS_ND.c | 1850 | FreeRTOS_ND.c | 1704 |
FreeRTOS_RA.c | 1228 | FreeRTOS_RA.c | 1022 |
FreeRTOS_Routing.c | 1357 | FreeRTOS_Routing.c | 1269 |
FreeRTOS_Sockets.c | 6910 | FreeRTOS_Sockets.c | 5982 |
FreeRTOS_Stream_Buffer.c | 498 | FreeRTOS_Stream_Buffer.c | 424 |
FreeRTOS_TCP_IP.c | 1176 | FreeRTOS_TCP_IP.c | 934 |
FreeRTOS_TCP_IP_IPV6.c | 614 | FreeRTOS_TCP_IP_IPV6.c | 482 |
FreeRTOS_TCP_Reception.c | 818 | FreeRTOS_TCP_Reception.c | 666 |
FreeRTOS_TCP_State_Handling.c | 1676 | FreeRTOS_TCP_State_Handling.c | 1448 |
FreeRTOS_TCP_State_Handling_IPV6.c | 304 | FreeRTOS_TCP_State_Handling_IPV6.c | 256 |
FreeRTOS_TCP_Transmission.c | 1814 | FreeRTOS_TCP_Transmission.c | 1588 |
FreeRTOS_TCP_Transmission_IPV6.c | 996 | FreeRTOS_TCP_Transmission_IPV6.c | 918 |
FreeRTOS_TCP_Utils.c | 18 | FreeRTOS_TCP_Utils.c | 12 |
FreeRTOS_TCP_Utils_IPV6.c | 50 | FreeRTOS_TCP_Utils_IPV6.c | 48 |
FreeRTOS_TCP_WIN.c | 2086 | FreeRTOS_TCP_WIN.c | 1768 |
FreeRTOS_Tiny_TCP.c | 302 | FreeRTOS_Tiny_TCP.c | 290 |
FreeRTOS_UDP_IP.c | 94 | FreeRTOS_UDP_IP.c | 90 |
FreeRTOS_UDP_IPv6.c | 720 | FreeRTOS_UDP_IPv6.c | 616 |
Total | 34569 | Total | 30233 |
Compiler: arm-none-eabi-gcc (GNU Tools for STM32) 10.3.1
Version used for object size calculation: bb654636