1Documentation and download available at https://www.FreeRTOS.org/ 2 3Changes between FreeRTOS-plus-TCP V4.0.0 and V3.1.0 released August 10, 2023 4 + Unified code for both IPv4 and IPv6 protocols. 5 + Multiple Interface and Multiple Endpoint support 6 1. The stack supports multiple Physical Interfaces. 7 2. The stack also supports multiple endpoints (or Virtual interfaces) on the same physical interface. 8 + New WinSim demo to support IPv4, IPv6 and multi-interface together. 9 (Reference: https://github.com/FreeRTOS/FreeRTOS/tree/main/FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_IPv6_Demo/IPv6_Multi_WinSim_demo) 10 + Build separation feature introduced to achieve low memory footprint. Supported build combinations: 11 1. IPv4 + UDP 12 2. IPv4 + UDP + TCP 13 3. IPv6 + UDP 14 4. IPv6 + UDP + TCP 15 5. IPv4 + IPv6 + UDP 16 6. IPv4 + IPv6 + UDP + TCP 17 + Support added in FreeRTOS-plus-TCP git repository CI tool to validate various build configurations before PR merge. 18 + Achieved 100% unit test coverage for both IPv4 and IPv6. 19 + MISRA c-2012 compliance for both IPv4 and IPv6. 20 + Addressed several issues observed by Maxwell Protocol tester. 21 + Memory safety proofs for IPv6 code using[ CBMC automated reasoning tool ] (https://www.cprover.org/cbmc/). 22 + Stack is Penetration tested and a memory leak issue has been identified and fixed in the process. 23 (Reference: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/pull/973) 24 + Improved Documentation: 25 1. Multi-interface and Multi-endpoint documentation. 26 2. Updated stack initialization documentation to support multi-interface and endpoint. 27 (Reference: https://freertos-wordpress.corp.amazon.com/FreeRTOS-Plus/FreeRTOS_Plus_TCP/TCP_Networking_Tutorial_Initialising_TCP.updated.html) 28 3. Code size details for various build configurations 29 (Reference: https://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/index.html). 30 4. Documentation added for IPv6 protocol support. 31 5. Documentation added for various IPv6 functionalities like DHCPv6, ND (Neighbour Discovery), RA (Router Advertisement). 32 6. README added for the network ports. 33 34We thank the following people for their inputs in these enhancements: 35 + Add mDNS fixes for IPv6. Contributed by @evpopov. 36 + IP offset calculation improvement. Contributed by @evpopov. 37 + CCS compiler fix for packed structs. Contributed by @rahul-arasikere. 38 + Add tasking compiler support. Contributed by @go2sh. 39 + Add NetworkDown notification support to STM32FXX. Contributed by @zipperowiec. 40 + CMake changes. Contributed by @phelter. 41 + STM32Hxx porting fixes. Contributed by @miguelfreitas. 42 + Allow use of loopback addresses. Contributed by @adam-stamand. 43 + CBMC proof-running GitHub Action. Contributed by @karkhaz. 44 + CBMC XML output to enable VSCode debugger. Contributed by @karkhaz. 45 + vTaskDelay for sleep in the network-interface of xilinx_ultrascale.Contributed by @ChristosZosi. 46 + Read mac address using FreeRTOS_GetMACAddress(). Contributed by @sayyadumar. 47 + Minor warning fixes. Contributed by @ChristosZosi. 48 + Network-interface fix for Xilinx UltraScale port. Contributed by @ChristosZosi. 49 50Changes between 4.0.0-RC3 and 4.0.0-RC2 releases: 51 + Added memory safety proofs for IPv6 using[ CBMC automated reasoning tool ] ( https:/*www.cprover.org/cbmc/) 52 + Introduced build separation feature to achieve low memory footprint. Supported build combinations: 53 1. IPv4 + UDP 54 2. IPv4 + UDP + TCP 55 3. IPv6 + UDP 56 4. IPv6 + UDP + TCP 57 5. IPv4 + IPv6 + UDP 58 6. IPv4 + IPv6 + UDP + TCP 59 60Changes between 4.0.0-RC2 and 4.0.0-RC1 releases: 61 + Added changes to fix IPv6 issues observed by Maxwell protocol tester. 62 63Changes between RC1 and V3.0.0 releases: 64 + Unified code for IPv4 and IPv6 65 + Multiple Interface/Endpoint support 66 (Reference: https://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/freertostcp-multiple-interfaces.html). 67 + New WinSim demo to support both IPv4 and IPv6. 68**Note**- This release does not support ESP32/ M487/ mw300_rd ports yet. This will be released soon. 69 70Changes between V3.0.0 and V3.1.0 releases: 71 + Fixed a bug in the Connect function where multiple SYN and RST packet combinations can 72 lead to orphaned sockets. 73 + Added network interface support for NetifSlirp. 74 75Changes between V3.0.0 and V2.4.0 releases: 76 + Split the source files according to the function the code performs. 77 This makes the code modular making test coverage easier. 78 + Achieved 100% unit-test coverage. 79 + Improved RFC compliance. 80 + Improved MISRA c-2012 compliance. 81 82 Helpful links to help you upgrade to V3 83 + https://github.com/FreeRTOS/FreeRTOS-plus-tcp#generating-pre-v300-folder-structure-for-backward-compatibility 84 + https://www.freertos.org/2022/08/the-freertos-plus-tcp-library-is-now-more-robust-and-secure.html 85 86Changes between V2.3.3 and V2.3.4 releases: 87 + Added a check in BufferAllocation_2.c to ensure adding (2 + 88 ipBUFFER_PADDING) bytes to the requested allocation size does 89 not cause an integer overflow. Thanks to Bernard Lebel 90 (RMDS Innovation) reporting this potential issue. 91 + Updated FreeRTOS_inet_pton4() so it rejects IP addresses that 92 have leading zeros. Previously, if the IP address had leading 93 zeros, perhaps because it was entered in octal format, the 94 address was interpreted as decimal (the leading zeros were 95 stripped). That could result in the function returning an 96 unexpected IP address. 97 + Added logic to clear flags of a stored TCP packet to avoid 98 sending incorrect flags when receiving incorrect packets from 99 the peer. 100 + Fixed the IP header checksum calculation of ICMP response. 101 102Changes between V2.3.2 and V2.3.3 releases: 103 + When a listening socket is closed, all child sockets not yet owned by the 104 application will be closed too. (Thanks Bernd Edlinger). 105 + Updated buffer allocation to return a zero length buffer when 106 requested. (Thanks Thomas Pedersen). 107 + When there is insufficient space in the network event queue, closing of a 108 socket will be deferred for a later time. (Thanks Bernd Edlinger). 109 + Allow IP-task to clean up while deleting socket-sets to avoid race 110 conditions. (Thanks Bernd Edlinger). 111 + Added FreeRTOS+TCP version number macros. 112 + Repaired buffer leak in NBNS reply logic. 113 + Added a hook function which can be used to process unsupported ethernet 114 frames. 115 + Added a check for ICMP packets with incorrect checksum. 116 117Changes between V2.3.1 and V2.3.2 releases: 118 + When a protocol error occurs during the SYN-phase of a TCP connection, a 119 child socket will now be closed ( calling FreeRTOS_closesocket() ), 120 instead of being given the eCLOSE_WAIT status. A client socket, which calls 121 connect() to establish a connection, will receive the eCLOSE_WAIT status, 122 just like before. 123 + Fixed a race condition in DHCP state machine which occured when the macro 124 dhcpINITIAL_TIMER_PERIOD was set to a very low value. 125 126Changes between V2.3.0 and V2.3.1 releases: 127 + Fixed UDP only compilation. 128 + Added description for functions and variables in Doxygen compatible format. 129 + Fixed asynchronous DNS lookup which was broken due to changed function 130 signature of prvParseDNSReply. 131 132Changes between V2.2.2 and V2.3.0 releases: 133 + Moved FreeRTOS+TCP source code to an independent repository 134 FreeRTOS/FreeRTOS-Plus-TCP. 135 136Changes between V2.2.1 and V2.2.2 releases: 137 + Updated the source code to adhere to stricter MISRA compliance. 138 139Changes between V2.0.0 and V2.2.1 releases: 140 + Improved security by giving users the option to reject UDP packets with a 141 checksum of zero even though the UDP spec allows it. 142 + Improved robustness by checking packet lengths in software even if the check 143 has already been performed in the hardware. 144 + Added ipconfigIP_PASS_PACKETS_WITH_IP_OPTIONS macro to enable users to 145 drop/accept IP Packets containing IP options (IP options are not supported). 146 + Modified xDataLength to always mean "total number of bytes" to impart more 147 clarity. 148 + Replaced the ipconfigRAND32 macro with a function 149 xApplicationGetRandomNumber(). The return value indicates if the randomiser 150 is broken or working properly. Before this, a random value of 0 was treated 151 as invalid, whereas 0 can be a proper random value. 152 + Made changes in DNS to make asynchronous lookup work. 153 + Made FreeRTOS_OutputARPRequest() available for application code. Now the 154 application can start an ARP request directly by sending a UDP packet. 155 + Made Socket_t and SocketSet_t point to a struct in stead of void. 156 + Corrected the DNSs protocol-checksum calculation length. 157 + Corrected length-check in usGenerateProtocolChecksum(). 158 + Modified pxGetNetworkBufferWithDescriptor() function to check if a counting 159 semaphore has been created. Earlier when a user tried to get a Network 160 Buffer before the IP-task started, the function could crash. 161 + Made TCP low-water/high-water limits configurable with a socket option. 162 + The 'ucFirstOptionByte' was counted twice in earlier releases, subtract 1 163 byte to send the correct amount of bytes. 164 + Corrected the WIN size reporting to the TCP peer. The WIN size as reported 165 to the TCP peer was sometimes running slightly behind. 166 + Added a function FreeRTOS_dnsclear() which invalidates the entire DNS cache. 167 + Added DNS response transaction ID check. The DNS cache shall only be updated 168 when the ID in the reply comes from the device. 169 170Changes between 180821 and V2.0.0 releases: 171 + Move the TCP source code from FreeRTOS/FreeRTOS-Labs to FreeRTOS/FreeRTOS 172 repository. 173 174Changes between 160919 and 180821 releases: 175 176 + Multiple security improvements and fixes in packet parsing routines, DNS 177 caching, and TCP sequence number and ID generation. 178 + Disable NBNS and LLMNR by default. 179 + Add TCP hang protection by default. 180 181We thank Ori Karliner of Zimperium zLabs Team for reporting these issues. 182 183Changes between 160908 and 160919 releases: 184 185 + Add a NULL check before attempting to close the DHCP socket. [Prior to 186 160823 the IP task closed the DHCP socket by calling a public API function 187 - which checked for the socket being NULL. This was changed to call a 188 local private function, which did not have a NULL check, in place of the 189 public API function.] 190 + Various [internal only] naming changes to better comply with the FreeRTOS 191 naming conventions. 192 + Improvements to the Zynq network driver. DMA transmission buffers now use 193 a counting semaphore. When all TX-buffers are in-use, the IP-task will 194 block momentarily until a TX-buffer becomes available. 195 + Experimental implementation of the TCP window scaling protocol. The 196 scaling option will always be offered, at least with a factor 1. If the 197 TCP sliding window size becomes more than 64KB, the factor will increase 198 automatically. 199 + ipconfigETHERNET_MINIMUM_PACKET_BYTES is now applied for every protocol: 200 TCP, UDP, and ARP. 201 + Updated the Zynq project to use BufferAllocation_1.c rather than 202 BufferAllocation_2.c - which is a requirement with its current 203 configuration (due to the alignment requirements on the combined cache and 204 DMA configuration). 205 206Changes between 160823 and 160908 releases: 207 208 + Use ipconfigZERO_COPY_TX_DRIVER as the xReleaseAfterSend() parameter where 209 prvTCPReturnPacket() is called in prvSendData() to prevent unnecessary 210 copying of data. 211 + Remove the use of the uxGetRxEventCount variable, which was used to give 212 priority to incoming messages, but could result in the IP task starving 213 application tasks of processing time. 214 215Changes between 160112 and 160823 releases 216 217 NOTE: The 160908 release is a maintenance release for the 160112 single 218 interface labs release - not a release of the current development branch. 219 220 + Various minor stability enhancements, including the ability to work with 221 configTICK_RATE_HZ set to less than 1KHz, closing DHCP sockets directly 222 rather than via FreeRTOS_closesocket(), and better handling of unknown 223 TCP packets before an IP address has been assigned. 224 + ipBUFFER_PADDING is now configurable through the ipconfigBUFFER_PADDING 225 constant to improve network buffer alignment handling capabilities (expert 226 users/driver writers only). 227 + Multiple improvements to the FTP server, including to how read only and 228 zero length files are handled. 229 + ipconfigFTP_HAS_USER_PROPERTIES_HOOK (to allow each user to have a 230 different root directory and access rights) and 231 ipconfigHTTP_HAS_HANDLE_REQUEST_HOOK (to handle AJAX style data) 232 introduced, although these are not yet fully tested and the constant names 233 are likely to change. 234 + Introduce ipconfigHAS_TX_CRC_OFFLOADING. 235 + ipconfigUSE_DHCP_HOOK is now called ipconfigUSE_DHCP_HOOK, and the name 236 of the callback function has also changed. See the web documentation for 237 details. 238 + ipconfigTCP_RX_BUF_LEN is now ipconfigTCP_RX_BUFFER_LENGTH, and 239 ipconfigTCP_TX_BUF_LEN is now ipconfigTCP_TX_BUFFER_LENGTH, which is 240 actually how they have always been documented. 241 + Added example TFTP server capable of receiving (not sending) files. 242 Intended for bootloader type functionality. 243 + Various variable name changes for consistency (mainly ensuring UDP, TCP, 244 DNS, etc. always use the same case letters, and type prefixes are correct). 245 + Various minor edits to improve types used by internal variables. 246 + Simplified mapping of standard library functions to their Visual Studio 247 equivalents. 248 + Improve robustness of network drivers. 249 + Introduce pxResizeNetworkBufferWithDescriptor(). 250 + Removed obsolete FreeRTOSIPConfig.h constants from 251 FreeRTOSIPConfigDefaults.h. 252 + Added additional asserts() - predominantly to catch incorrect structure 253 packing. 254 255Changes between 160112 and 160111 releases 256 257 + Updated the STM32 network driver so checksums are calculated by the 258 hardware. 259 + Implemented a simple "quit" command in the TCP command console. 260 261Changes between 150825 and 160111 releases 262 263 + New device support: Demo applications and example drivers are provided 264 for Atmel SAM4E and ST STM32F4 microcontrollers. 265 + Various updates to improve compliance with the FreeRTOS coding standard. 266 + Added a command console example that uses TCP/IP for input and output (the 267 pre-existing command console example uses UDP/IP). 268 + Updated the UDP logging example so it will send log messages to the local 269 UDP broadcast address if a specific IP address is not provided. This 270 simplifies configuration, but note not all switches and routers will pass 271 broadcast messages. 272 + Add TCP echo client and TCP echo server examples to the Zynq demo. 273 + Minor updates to the Zynq network driver. 274 + Update the Zynq project to use version 2015.4 of the Xilinx SDK. 275 + Introduce FreeRTOS_SignalSocket(), which can be used to interrupt a task 276 that is blocked while reading from a socket ( FreeRTOS_recv[from] ). 277 + Make use of FreeRTOS_SignalSocket() in the FTP and HTTP servers. 278 + Major updates to the NTP client, although this is not included in any of 279 the pre-configured demo applications yet. 280 + Added support for DHCP zero pad option. 281 + Added uxGetMinimumIPQueueSpace(), a function to monitor the minimum amount 282 of space on the message queue. 283 + Better handling of zero length files in the FTP server. 284 + Fixed a bug reported by Andrey Ivanov from swissEmbedded that affects 285 users of 'ipconfigZERO_COPY_TX_DRIVER'. 286 287 288Changes between 150825 150825 (?) 289 290 + Added xApplicationDHCPUserHook() so a user defined hook will be 291 called at certain points in the DHCP process if 292 ipconfigDHCP_USES_USER_HOOK is set to 1. 293 + Added FreeRTOS_get_tx_head() to improve TCP zero copy behaviour - for 294 expert use only. 295 + RST is no longer sent if only the ACK flag is set. 296 + Previously, an immediate ACK was only sent when buffer space was 297 exhausted. Now, to improve performance, it is possible to send an 298 immediate ACK earlier - dependent on the ipconfigTCP_ACK_EARLIER_PACKET 299 setting. 300 + LLMNR and NBNS requests can now be sent to locate other devices - 301 previously these protocols would only be replied to, not generated. 302 + Added Auto-IP functionality (still in test) in case DHCP fails. Dependent 303 on the ipconfigDHCP_FALL_BACK_LINK_LAYER_ADDRESS and 304 ipconfigARP_USE_CLASH_DETECTION settings. 305 + Added NTP code and demo. 306 + FTP can now STOR and RETR zero-length files. 307 + Added LLMNR demo to Win32 demo - so now the Win32 responds to 308 "ping RTOSDemo". 309 310Changes between 141019 and 150825 311 312 + Added FTP server, which uses the new FreeRTOS+FAT component. 313 + Added basic HTTP server, which uses the new FreeRTOS+FAT component. 314 + Multiple definitions that are now common with FreeRTOS+FAT have been moved 315 into FreeRTOS's ProjDefs.h header file, and so prefixed with 'pd'. 316 + Introduced ipconfigZERO_COPY_TX_DRIVER, which defines who is responsible 317 for freeing a buffer sent to to the MAC driver for transmission, and 318 facilitates the development of zero copy drivers. 319 + Introduced the FREERTOS_MSG_DONTWAIT flag. The flag can be used as a 320 simpler and faster alternative to using FreeRTOS_setsockopt() to set the 321 send or receive timeout to 0. 322 + A few functions that were previously all lower case are now mixed case, as 323 lower case function names are only used when they are equivalent to a 324 a Berkeley sockets API function of the same name. 325 + Introduced uxGetMinimumFreeNetworkBuffers() to return the minimum number 326 of network buffers that have ever existed since the application started 327 executing. 328 + Introduce ipconfigETHERNET_MINIMUM_PACKET_BYTES to allow the application 329 writer to set their own minimum buffer size should the hardware not be 330 capable of padding under-sized Ethernet frames. 331 + vNetworkBufferRelease() renamed vReleaseNetworkBuffer() - just for 332 consistency with the names of other functions in the same file. 333 + Grouped DHCP status data into a structure. 334 + DHCP is now tried both with and without the broadcast flag. 335 + Replaced occurrences of configASSERT_VOID() with configASSERT(). 336 + ipconfigDNS_USE_CALLBACKS introduced to allow FreeRTOS_gethostbyname() to 337 be used without blocking. 338 + Fix: LLMNR and NBNS behaviour when the reply is in a larger buffer than the 339 request, and BufferAllocation_2 was used. 340 + Introduced ipMAX_IP_TASK_SLEEP_TIME to allow the application writer to 341 override the default value of 10 seconds. 342 + Fix: Correct error in *pxUDPPayloadBuffer_to_NetworkBuffer(). 343 + FreeRTOS_recv() now recognises the FREERTOS_ZERO_COPY flag, which, when 344 set, the void *pvBuffer parameter is interpreted as void **pvBuffer. 345 + FreeRTOS_listen() now returns an error code. Previously it always 346 returned 0. 347 + Fix: Previously if a listening socket was reused, and a connection 348 failed, the TCP/IP stack closed the socket, now the socket is correctly 349 left unclosed as it is owned by the application. 350 + Various other formatting and minor fix alterations. 351