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