3 * TODO: The lwIP source code makes some invalid assumptions on processor
4 word-length, storage sizes and alignment. See the mailing lists for
5 problems with exoteric (/DSP) architectures showing these problems.
6 We still have to fix some of these issues neatly.
8 * TODO: the ARP layer is not protected against concurrent access. If
9 you run from a multitasking OS, serialize access to ARP (called from
10 your network device driver and from a timeout thread.)
16 2004-12-28 Leon Woestenberg <leon.woestenberg@gmx.net>
17 * etharp.*: Disabled multiple packets on the ARP queue.
18 This clashes with TCP queueing.
20 2004-11-28 Leon Woestenberg <leon.woestenberg@gmx.net>
21 * etharp.*: Fixed race condition from ARP request to ARP timeout.
22 Halved the ARP period, doubled the period counts.
23 ETHARP_MAX_PENDING now should be at least 2. This prevents
24 the counter from reaching 0 right away (which would allow
25 too little time for ARP responses to be received).
27 2004-11-25 Leon Woestenberg <leon.woestenberg@gmx.net>
28 * dhcp.c: Decline messages were not multicast but unicast.
29 * etharp.c: ETHARP_CREATE is renamed to ETHARP_TRY_HARD.
30 Do not try hard to insert arbitrary packet's source address,
31 etharp_ip_input() now calls etharp_update() without ETHARP_TRY_HARD.
32 etharp_query() now always DOES call ETHARP_TRY_HARD so that users
33 querying an address will see it appear in the cache (DHCP could
34 suffer from this when a server invalidly gave an in-use address.)
35 * ipv4/ip_addr.h: Renamed ip_addr_maskcmp() to _netcmp() as we are
36 comparing network addresses (identifiers), not the network masks
38 * ipv4/ip_addr.c: ip_addr_isbroadcast() now checks that the given
39 IP address actually belongs to the network of the given interface.
41 2004-11-24 Kieran Mansley <kjm25@cam.ac.uk>
42 * tcp.c: Increment pcb->snd_buf when ACK is received in SYN_SENT state.
46 2004-10-16 Kieran Mansley <kjm25@cam.ac.uk>
47 * tcp.c: Add code to tcp_recved() to send an ACK (window update) immediately,
48 even if one is already pending, if the rcv_wnd is above a threshold
49 (currently TCP_WND/2). This avoids waiting for a timer to expire to send a
50 delayed ACK in order to open the window if the stack is only receiving data.
52 2004-09-12 Kieran Mansley <kjm25@cam.ac.uk>
53 * tcp*.*: Retransmit time-out handling improvement by Sam Jansen.
55 2004-08-20 Tony Mountifield <tony@softins.co.uk>
56 * etharp.c: Make sure the first pbuf queued on an ARP entry
57 is properly ref counted.
59 2004-07-27 Tony Mountifield <tony@softins.co.uk>
60 * debug.h: Added (int) cast in LWIP_DEBUGF() to avoid compiler
61 warnings about comparison.
62 * pbuf.c: Stopped compiler complaining of empty if statement
63 when LWIP_DEBUGF() empty. Closed an unclosed comment.
64 * tcp.c: Stopped compiler complaining of empty if statement
65 when LWIP_DEBUGF() empty.
66 * ip.h Corrected IPH_TOS() macro: returns a byte, so doesn't need htons().
67 * inet.c: Added a couple of casts to quiet the compiler.
68 No need to test isascii(c) before isdigit(c) or isxdigit(c).
70 2004-07-22 Tony Mountifield <tony@softins.co.uk>
71 * inet.c: Made data types consistent in inet_ntoa().
72 Added casts for return values of checksum routines, to pacify compiler.
73 * ip_frag.c, tcp_out.c, sockets.c, pbuf.c
74 Small corrections to some debugging statements, to pacify compiler.
76 2004-07-21 Tony Mountifield <tony@softins.co.uk>
77 * etharp.c: Removed spurious semicolon and added missing end-of-comment.
78 * ethernetif.c Updated low_level_output() to match prototype for
79 netif->linkoutput and changed low_level_input() similarly for consistency.
80 * api_msg.c: Changed recv_raw() from int to u8_t, to match prototype
81 of raw_recv() in raw.h and so avoid compiler error.
82 * sockets.c: Added trivial (int) cast to keep compiler happier.
83 * ip.c, netif.c Changed debug statements to use the tidier ip4_addrN() macros.
89 2004-07-05 Leon Woestenberg <leon.woestenberg@gmx.net>
90 * sockets.*: Restructured LWIP_PRIVATE_TIMEVAL. Make sure
91 your cc.h file defines this either 1 or 0. If non-defined,
93 * .c: Added <string.h> and <errno.h> includes where used.
94 * etharp.c: Made some array indices unsigned.
96 2004-06-27 Leon Woestenberg <leon.woestenberg@gmx.net>
97 * netif.*: Added netif_set_up()/down().
98 * dhcp.c: Changes to restart program flow.
100 2004-05-07 Leon Woestenberg <leon.woestenberg@gmx.net>
101 * etharp.c: In find_entry(), instead of a list traversal per candidate, do a
102 single-pass lookup for different candidates. Should exploit locality.
104 2004-04-29 Leon Woestenberg <leon.woestenberg@gmx.net>
105 * tcp*.c: Cleaned up source comment documentation for Doxygen processing.
106 * opt.h: ETHARP_ALWAYS_INSERT option removed to comply with ARP RFC.
107 * etharp.c: update_arp_entry() only adds new ARP entries when adviced to by
108 the caller. This deprecates the ETHARP_ALWAYS_INSERT overrule option.
112 2004-04-27 Leon Woestenberg <leon.woestenberg@gmx.net>
113 * etharp.c: Applied patch of bug #8708 by Toni Mountifield with a solution
114 suggested by Timmy Brolin. Fix for 32-bit processors that cannot access
115 non-aligned 32-bit words, such as soms 32-bit TCP/IP header fields. Fix
116 is to prefix the 14-bit Ethernet headers with two padding bytes.
118 2004-04-23 Leon Woestenberg <leon.woestenberg@gmx.net>
119 * ip_addr.c: Fix in the ip_addr_isbroadcast() check.
120 * etharp.c: Fixed the case where the packet that initiates the ARP request
121 is not queued, and gets lost. Fixed the case where the packets destination
122 address is already known; we now always queue the packet and perform an ARP
129 * Fixed TCP bug for SYN_SENT to ESTABLISHED state transition.
130 * Fixed TCP bug in dequeueing of FIN from out of order segment queue.
131 * Fixed two possible NULL references in rare cases.
137 * Fixed DHCP which did not include the IP address in DECLINE messages.
141 * etharp.c has been hauled over a bit.
147 * Fixed TCP bug induced by bad window resizing with unidirectional TCP traffic.
148 * Packets sent from ARP queue had invalid source hardware address.
152 * Pass-by ARP requests do now update the cache.
156 * No longer dependent on ctype.h.
157 * New socket options.
158 * Raw IP pcb support.
164 * Some debug formatters and casts fixed.
165 * Numereous fixes in PPP.
169 * DEBUGF now is LWIP_DEBUGF
170 * pbuf_dechain() has been re-enabled.
171 * Mentioned the changed use of CVS branches in README.
177 * Fixed pool pbuf memory leak in pbuf_alloc().
178 Occured if not enough PBUF_POOL pbufs for a packet pbuf chain.
179 Reported by Savin Zlobec.
181 * PBUF_POOL chains had their tot_len field not set for non-first
182 pbufs. Fixed in pbuf_alloc().
186 * Added PPP stack contributed by Marc Boucher
190 * Now drops short packets for ICMP/UDP/TCP protocols. More robust.
192 * ARP queueuing now queues the latest packet instead of the first.
193 This is the RFC recommended behaviour, but can be overridden in
200 * TCP has been fixed to deal with the new use of the pbuf->ref
203 * DHCP dhcp_inform() crash bug fixed.
207 * Removed pbuf_pool_free_cache and pbuf_pool_alloc_cache. Also removed
208 pbuf_refresh(). This has sped up pbuf pool operations considerably.
209 Implemented by David Haas.
215 * The packet buffer implementation has been enhanced to support
216 zero-copy and copy-on-demand for packet buffers which have their
217 payloads in application-managed memory.
218 Implemented by David Haas.
220 Use PBUF_REF to make a pbuf refer to RAM. lwIP will use zero-copy
221 if an outgoing packet can be directly sent on the link, or perform
222 a copy-on-demand when necessary.
224 The application can safely assume the packet is sent, and the RAM
225 is available to the application directly after calling udp_send()
230 * ARP_QUEUEING should now correctly work for all cases, including
232 Implemented by Leon Woestenberg.
236 * IP_ADDR_ANY is no longer a NULL pointer. Instead, it is a pointer
237 to a '0.0.0.0' IP address.
239 * The packet buffer implementation is changed. The pbuf->ref counter
240 meaning has changed, and several pbuf functions have been
243 * netif drivers have to be changed to set the hardware address length field
244 that must be initialized correctly by the driver (hint: 6 for Ethernet MAC).
245 See the contrib/ports/c16x cs8900 driver as a driver example.
247 * netif's have a dhcp field that must be initialized to NULL by the driver.
248 See the contrib/ports/c16x cs8900 driver as a driver example.
250 (0.5.x) This file has been unmaintained up to 0.6.1. All changes are
251 logged in CVS but have not been explained here.
253 (0.5.3) Changes since version 0.5.2
257 * memp_malloc(MEMP_API_MSG) could fail with multiple application
258 threads because it wasn't protected by semaphores.
262 * struct ip_addr now packed.
264 * The name of the time variable in arp.c has been changed to ctime
265 to avoid conflicts with the time() function.
267 (0.5.2) Changes since version 0.5.1
271 * A new TCP function, tcp_tmr(), now handles both TCP timers.
275 * A bug in tcp_parseopt() could cause the stack to hang because of a
276 malformed TCP option.
278 * The address of new connections in the accept() function in the BSD
279 socket library was not handled correctly.
281 * pbuf_dechain() did not update the ->tot_len field of the tail.
283 * Aborted TCP connections were not handled correctly in all
288 * All protocol header structs are now packed.
290 * The ->len field in the tcp_seg structure now counts the actual
291 amount of data, and does not add one for SYN and FIN segments.
293 (0.5.1) Changes since version 0.5.0
297 * Possible to run as a user process under Linux.
299 * Preliminary support for cross platform packed structs.
301 * ARP timer now implemented.
305 * TCP output queue length was badly initialized when opening
308 * TCP delayed ACKs were not sent correctly.
310 * Explicit initialization of BSS segment variables.
312 * read() in BSD socket library could drop data.
314 * Problems with memory alignment.
316 * Situations when all TCP buffers were used could lead to
319 * TCP MSS option wasn't parsed correctly.
321 * Problems with UDP checksum calculation.
323 * IP multicast address tests had endianess problems.
325 * ARP requests had wrong destination hardware address.
329 * struct eth_addr changed from u16_t[3] array to u8_t[6].
331 * A ->linkoutput() member was added to struct netif.
333 * TCP and UDP ->dest_* struct members where changed to ->remote_*.
335 * ntoh* macros are now null definitions for big endian CPUs.
337 (0.5.0) Changes since version 0.4.2
341 * Redesigned operating system emulation layer to make porting easier.
343 * Better control over TCP output buffers.
345 * Documenation added.
349 * Locking issues in buffer management.
351 * Bugfixes in the sequential API.
353 * IP forwarding could cause memory leakage. This has been fixed.
357 * Directory structure somewhat changed; the core/ tree has been
360 (0.4.2) Changes since version 0.4.1
364 * Experimental ARP implementation added.
366 * Skeleton Ethernet driver added.
368 * Experimental BSD socket API library added.
372 * In very intense situations, memory leakage could occur. This has
377 * Variables named "data" and "code" have been renamed in order to
378 avoid name conflicts in certain compilers.
380 * Variable++ have in appliciable cases been translated to ++variable
381 since some compilers generate better code in the latter case.
383 (0.4.1) Changes since version 0.4
387 * TCP: Connection attempts time out earlier than data
388 transmissions. Nagle algorithm implemented. Push flag set on the
389 last segment in a burst.
391 * UDP: experimental support for UDP-Lite extensions.
395 * TCP: out of order segments were in some cases handled incorrectly,
396 and this has now been fixed. Delayed acknowledgements was broken
397 in 0.4, has now been fixed. Binding to an address that is in use
398 now results in an error. Reset connections sometimes hung an
399 application; this has been fixed.
401 * Checksum calculation sometimes failed for chained pbufs with odd
402 lengths. This has been fixed.
404 * API: a lot of bug fixes in the API. The UDP API has been improved
405 and tested. Error reporting and handling has been
406 improved. Logical flaws and race conditions for incoming TCP
407 connections has been found and removed.
409 * Memory manager: alignment issues. Reallocating memory sometimes
410 failed, this has been fixed.
412 * Generic library: bcopy was flawed and has been fixed.
416 * API: all datatypes has been changed from generic ones such as
417 ints, to specified ones such as u16_t. Functions that return
418 errors now have the correct type (err_t).
420 * General: A lot of code cleaned up and debugging code removed. Many
421 portability issues have been fixed.
423 * The license was changed; the advertising clause was removed.
427 * Thanks: Huge thanks go to Dagan Galarneau, Horst Garnetzke, Petri
428 Kosunen, Mikael Caleres, and Frits Wilmink for reporting and
431 (0.4) Changes since version 0.3.1
433 * Memory management has been radically changed; instead of
434 allocating memory from a shared heap, memory for objects that are
435 rapidly allocated and deallocated is now kept in pools. Allocation
436 and deallocation from those memory pools is very fast. The shared
437 heap is still present but is used less frequently.
439 * The memory, memory pool, and packet buffer subsystems now support
440 4-, 2-, or 1-byte alignment.
442 * "Out of memory" situations are handled in a more robust way.
444 * Stack usage has been reduced.
446 * Easier configuration of lwIP parameters such as memory usage,
447 TTLs, statistics gathering, etc. All configuration parameters are
448 now kept in a single header file "lwipopts.h".
450 * The directory structure has been changed slightly so that all
451 architecture specific files are kept under the src/arch
454 * Error propagation has been improved, both in the protocol modules
457 * The code for the RTXC architecture has been implemented, tested
460 * Bugs have been found and corrected in the TCP, UDP, IP, API, and
461 the Internet checksum modules.
463 * Bugs related to porting between a 32-bit and a 16-bit architecture
464 have been found and corrected.
466 * The license has been changed slightly to conform more with the
467 original BSD license, including the advertisement clause.
469 (0.3.1) Changes since version 0.3
471 * Fix of a fatal bug in the buffer management. Pbufs with allocated
472 RAM never returned the RAM when the pbuf was deallocated.
474 * TCP congestion control, window updates and retransmissions did not
475 work correctly. This has now been fixed.
477 * Bugfixes in the API.
479 (0.3) Changes since version 0.2
481 * New and improved directory structure. All include files are now
482 kept in a dedicated include/ directory.
484 * The API now has proper error handling. A new function,
485 netconn_err(), now returns an error code for the connection in
488 * Improvements in the memory management subsystem. The system now
489 keeps a pointer to the lowest free memory block. A new function,
490 mem_malloc2() tries to allocate memory once, and if it fails tries
491 to free some memory and retry the allocation.
493 * Much testing has been done with limited memory
494 configurations. lwIP now does a better job when overloaded.
496 * Some bugfixes and improvements to the buffer (pbuf) subsystem.
498 * Many bugfixes in the TCP code:
500 - Fixed a bug in tcp_close().
502 - The TCP receive window was incorrectly closed when out of
503 sequence segments was received. This has been fixed.
505 - Connections are now timed-out of the FIN-WAIT-2 state.
507 - The initial congestion window could in some cases be too
508 large. This has been fixed.
510 - The retransmission queue could in some cases be screwed up. This
513 - TCP RST flag now handled correctly.
515 - Out of sequence data was in some cases never delivered to the
516 application. This has been fixed.
518 - Retransmitted segments now contain the correct acknowledgment
519 number and advertised window.
521 - TCP retransmission timeout backoffs are not correctly computed
522 (ala BSD). After a number of retransmissions, TCP now gives up
525 * TCP connections now are kept on three lists, one for active
526 connections, one for listening connections, and one for
527 connections that are in TIME-WAIT. This greatly speeds up the fast
528 timeout processing for sending delayed ACKs.
530 * TCP now provides proper feedback to the application when a
531 connection has been successfully set up.
533 * More comments have been added to the code. The code has also been
536 (0.2) Initial public release.