blob: 0bf28ac568c6d0f1d1acf247ed2911faf8faca04 [file] [log] [blame]
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -07001FUTURE
2
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.
7
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.)
11
12 * TODO: the PPP code is broken in a few ways. There are namespace
13 collisions on BSD systems and many assumptions on word-length
14 (sizeof(int)). In ppp.c an assumption is made on the availability of
15 a thread subsystem. Either PPP needs to be moved to contrib/ports/???
16 or rearranged to be more generic.
17
18HISTORY
19
20(CVS HEAD)
21
22 * [New changes go here]
23
24(STABLE-1_1_1)
25
26 2006-03-03 Christiaan Simons
27 * ipv4/ip_frag.c: Added bound-checking assertions on ip_reassbitmap
28 access and added pbuf_alloc() return value checks.
29
30 2006-01-01 Leon Woestenberg <leon.woestenberg@gmx.net>
31 * tcp_{in,out}.c, tcp_out.c: Removed 'even sndbuf' fix in TCP, which is
32 now handled by the checksum routine properly.
33
34 2006-02-27 Leon Woestenberg <leon.woestenberg@gmx.net>
35 * pbuf.c: Fix alignment; pbuf_init() would not work unless
36 pbuf_pool_memory[] was properly aligned. (Patch by Curt McDowell.)
37
38 2005-12-20 Leon Woestenberg <leon.woestenberg@gmx.net>
39 * tcp.c: Remove PCBs which stay in LAST_ACK state too long. Patch
40 submitted by Mitrani Hiroshi.
41
42 2005-12-15 Christiaan Simons
43 * inet.c: Disabled the added summing routine to preserve code space.
44
45 2005-12-14 Leon Woestenberg <leon.woestenberg@gmx.net>
46 * tcp_in.c: Duplicate FIN ACK race condition fix by Kelvin Lawson.
47 Added Curt McDowell's optimized checksumming routine for future
48 inclusion. Need to create test case for unaliged, aligned, odd,
49 even length combination of cases on various endianess machines.
50
51 2005-12-09 Christiaan Simons
52 * inet.c: Rewrote standard checksum routine in proper portable C.
53
54 2005-11-25 Christiaan Simons
55 * udp.c tcp.c: Removed SO_REUSE hack. Should reside in socket code only.
56 * *.c: introduced cc.h LWIP_DEBUG formatters matching the u16_t, s16_t,
57 u32_t, s32_t typedefs. This solves most debug word-length assumes.
58
59 2005-07-17 Leon Woestenberg <leon.woestenberg@gmx.net>
60 * inet.c: Fixed unaligned 16-bit access in the standard checksum
61 routine by Peter Jolasson.
62 * slipif.c: Fixed implementation assumption of single-pbuf datagrams.
63
64 2005-02-04 Leon Woestenberg <leon.woestenberg@gmx.net>
65 * tcp_out.c: Fixed uninitialized 'queue' referenced in memerr branch.
66 * tcp_{out|in}.c: Applied patch fixing unaligned access.
67
68 2005-01-04 Leon Woestenberg <leon.woestenberg@gmx.net>
69 * pbuf.c: Fixed missing semicolon after LWIP_DEBUG statement.
70
71 2005-01-03 Leon Woestenberg <leon.woestenberg@gmx.net>
72 * udp.c: UDP pcb->recv() was called even when it was NULL.
73
74(STABLE-1_1_0)
75
76 2004-12-28 Leon Woestenberg <leon.woestenberg@gmx.net>
77 * etharp.*: Disabled multiple packets on the ARP queue.
78 This clashes with TCP queueing.
79
80 2004-11-28 Leon Woestenberg <leon.woestenberg@gmx.net>
81 * etharp.*: Fixed race condition from ARP request to ARP timeout.
82 Halved the ARP period, doubled the period counts.
83 ETHARP_MAX_PENDING now should be at least 2. This prevents
84 the counter from reaching 0 right away (which would allow
85 too little time for ARP responses to be received).
86
87 2004-11-25 Leon Woestenberg <leon.woestenberg@gmx.net>
88 * dhcp.c: Decline messages were not multicast but unicast.
89 * etharp.c: ETHARP_CREATE is renamed to ETHARP_TRY_HARD.
90 Do not try hard to insert arbitrary packet's source address,
91 etharp_ip_input() now calls etharp_update() without ETHARP_TRY_HARD.
92 etharp_query() now always DOES call ETHARP_TRY_HARD so that users
93 querying an address will see it appear in the cache (DHCP could
94 suffer from this when a server invalidly gave an in-use address.)
95 * ipv4/ip_addr.h: Renamed ip_addr_maskcmp() to _netcmp() as we are
96 comparing network addresses (identifiers), not the network masks
97 themselves.
98 * ipv4/ip_addr.c: ip_addr_isbroadcast() now checks that the given
99 IP address actually belongs to the network of the given interface.
100
101 2004-11-24 Kieran Mansley <kjm25@cam.ac.uk>
102 * tcp.c: Increment pcb->snd_buf when ACK is received in SYN_SENT state.
103
104(STABLE-1_1_0-RC1)
105
106 2004-10-16 Kieran Mansley <kjm25@cam.ac.uk>
107 * tcp.c: Add code to tcp_recved() to send an ACK (window update) immediately,
108 even if one is already pending, if the rcv_wnd is above a threshold
109 (currently TCP_WND/2). This avoids waiting for a timer to expire to send a
110 delayed ACK in order to open the window if the stack is only receiving data.
111
112 2004-09-12 Kieran Mansley <kjm25@cam.ac.uk>
113 * tcp*.*: Retransmit time-out handling improvement by Sam Jansen.
114
115 2004-08-20 Tony Mountifield <tony@softins.co.uk>
116 * etharp.c: Make sure the first pbuf queued on an ARP entry
117 is properly ref counted.
118
119 2004-07-27 Tony Mountifield <tony@softins.co.uk>
120 * debug.h: Added (int) cast in LWIP_DEBUGF() to avoid compiler
121 warnings about comparison.
122 * pbuf.c: Stopped compiler complaining of empty if statement
123 when LWIP_DEBUGF() empty. Closed an unclosed comment.
124 * tcp.c: Stopped compiler complaining of empty if statement
125 when LWIP_DEBUGF() empty.
126 * ip.h Corrected IPH_TOS() macro: returns a byte, so doesn't need htons().
127 * inet.c: Added a couple of casts to quiet the compiler.
128 No need to test isascii(c) before isdigit(c) or isxdigit(c).
129
130 2004-07-22 Tony Mountifield <tony@softins.co.uk>
131 * inet.c: Made data types consistent in inet_ntoa().
132 Added casts for return values of checksum routines, to pacify compiler.
133 * ip_frag.c, tcp_out.c, sockets.c, pbuf.c
134 Small corrections to some debugging statements, to pacify compiler.
135
136 2004-07-21 Tony Mountifield <tony@softins.co.uk>
137 * etharp.c: Removed spurious semicolon and added missing end-of-comment.
138 * ethernetif.c Updated low_level_output() to match prototype for
139 netif->linkoutput and changed low_level_input() similarly for consistency.
140 * api_msg.c: Changed recv_raw() from int to u8_t, to match prototype
141 of raw_recv() in raw.h and so avoid compiler error.
142 * sockets.c: Added trivial (int) cast to keep compiler happier.
143 * ip.c, netif.c Changed debug statements to use the tidier ip4_addrN() macros.
144
145(STABLE-1_0_0)
146
147 ++ Changes:
148
149 2004-07-05 Leon Woestenberg <leon.woestenberg@gmx.net>
150 * sockets.*: Restructured LWIP_PRIVATE_TIMEVAL. Make sure
151 your cc.h file defines this either 1 or 0. If non-defined,
152 defaults to 1.
153 * .c: Added <string.h> and <errno.h> includes where used.
154 * etharp.c: Made some array indices unsigned.
155
156 2004-06-27 Leon Woestenberg <leon.woestenberg@gmx.net>
157 * netif.*: Added netif_set_up()/down().
158 * dhcp.c: Changes to restart program flow.
159
160 2004-05-07 Leon Woestenberg <leon.woestenberg@gmx.net>
161 * etharp.c: In find_entry(), instead of a list traversal per candidate, do a
162 single-pass lookup for different candidates. Should exploit locality.
163
164 2004-04-29 Leon Woestenberg <leon.woestenberg@gmx.net>
165 * tcp*.c: Cleaned up source comment documentation for Doxygen processing.
166 * opt.h: ETHARP_ALWAYS_INSERT option removed to comply with ARP RFC.
167 * etharp.c: update_arp_entry() only adds new ARP entries when adviced to by
168 the caller. This deprecates the ETHARP_ALWAYS_INSERT overrule option.
169
170 ++ Bug fixes:
171
172 2004-04-27 Leon Woestenberg <leon.woestenberg@gmx.net>
173 * etharp.c: Applied patch of bug #8708 by Toni Mountifield with a solution
174 suggested by Timmy Brolin. Fix for 32-bit processors that cannot access
175 non-aligned 32-bit words, such as soms 32-bit TCP/IP header fields. Fix
176 is to prefix the 14-bit Ethernet headers with two padding bytes.
177
178 2004-04-23 Leon Woestenberg <leon.woestenberg@gmx.net>
179 * ip_addr.c: Fix in the ip_addr_isbroadcast() check.
180 * etharp.c: Fixed the case where the packet that initiates the ARP request
181 is not queued, and gets lost. Fixed the case where the packets destination
182 address is already known; we now always queue the packet and perform an ARP
183 request.
184
185(STABLE-0_7_0)
186
187 ++ Bug fixes:
188
189 * Fixed TCP bug for SYN_SENT to ESTABLISHED state transition.
190 * Fixed TCP bug in dequeueing of FIN from out of order segment queue.
191 * Fixed two possible NULL references in rare cases.
192
193(STABLE-0_6_6)
194
195 ++ Bug fixes:
196
197 * Fixed DHCP which did not include the IP address in DECLINE messages.
198
199 ++ Changes:
200
201 * etharp.c has been hauled over a bit.
202
203(STABLE-0_6_5)
204
205 ++ Bug fixes:
206
207 * Fixed TCP bug induced by bad window resizing with unidirectional TCP traffic.
208 * Packets sent from ARP queue had invalid source hardware address.
209
210 ++ Changes:
211
212 * Pass-by ARP requests do now update the cache.
213
214 ++ New features:
215
216 * No longer dependent on ctype.h.
217 * New socket options.
218 * Raw IP pcb support.
219
220(STABLE-0_6_4)
221
222 ++ Bug fixes:
223
224 * Some debug formatters and casts fixed.
225 * Numereous fixes in PPP.
226
227 ++ Changes:
228
229 * DEBUGF now is LWIP_DEBUGF
230 * pbuf_dechain() has been re-enabled.
231 * Mentioned the changed use of CVS branches in README.
232
233(STABLE-0_6_3)
234
235 ++ Bug fixes:
236
237 * Fixed pool pbuf memory leak in pbuf_alloc().
238 Occured if not enough PBUF_POOL pbufs for a packet pbuf chain.
239 Reported by Savin Zlobec.
240
241 * PBUF_POOL chains had their tot_len field not set for non-first
242 pbufs. Fixed in pbuf_alloc().
243
244 ++ New features:
245
246 * Added PPP stack contributed by Marc Boucher
247
248 ++ Changes:
249
250 * Now drops short packets for ICMP/UDP/TCP protocols. More robust.
251
252 * ARP queueuing now queues the latest packet instead of the first.
253 This is the RFC recommended behaviour, but can be overridden in
254 lwipopts.h.
255
256(0.6.2)
257
258 ++ Bugfixes:
259
260 * TCP has been fixed to deal with the new use of the pbuf->ref
261 counter.
262
263 * DHCP dhcp_inform() crash bug fixed.
264
265 ++ Changes:
266
267 * Removed pbuf_pool_free_cache and pbuf_pool_alloc_cache. Also removed
268 pbuf_refresh(). This has sped up pbuf pool operations considerably.
269 Implemented by David Haas.
270
271(0.6.1)
272
273 ++ New features:
274
275 * The packet buffer implementation has been enhanced to support
276 zero-copy and copy-on-demand for packet buffers which have their
277 payloads in application-managed memory.
278 Implemented by David Haas.
279
280 Use PBUF_REF to make a pbuf refer to RAM. lwIP will use zero-copy
281 if an outgoing packet can be directly sent on the link, or perform
282 a copy-on-demand when necessary.
283
284 The application can safely assume the packet is sent, and the RAM
285 is available to the application directly after calling udp_send()
286 or similar function.
287
288 ++ Bugfixes:
289
290 * ARP_QUEUEING should now correctly work for all cases, including
291 PBUF_REF.
292 Implemented by Leon Woestenberg.
293
294 ++ Changes:
295
296 * IP_ADDR_ANY is no longer a NULL pointer. Instead, it is a pointer
297 to a '0.0.0.0' IP address.
298
299 * The packet buffer implementation is changed. The pbuf->ref counter
300 meaning has changed, and several pbuf functions have been
301 adapted accordingly.
302
303 * netif drivers have to be changed to set the hardware address length field
304 that must be initialized correctly by the driver (hint: 6 for Ethernet MAC).
305 See the contrib/ports/c16x cs8900 driver as a driver example.
306
307 * netif's have a dhcp field that must be initialized to NULL by the driver.
308 See the contrib/ports/c16x cs8900 driver as a driver example.
309
310(0.5.x) This file has been unmaintained up to 0.6.1. All changes are
311 logged in CVS but have not been explained here.
312
313(0.5.3) Changes since version 0.5.2
314
315 ++ Bugfixes:
316
317 * memp_malloc(MEMP_API_MSG) could fail with multiple application
318 threads because it wasn't protected by semaphores.
319
320 ++ Other changes:
321
322 * struct ip_addr now packed.
323
324 * The name of the time variable in arp.c has been changed to ctime
325 to avoid conflicts with the time() function.
326
327(0.5.2) Changes since version 0.5.1
328
329 ++ New features:
330
331 * A new TCP function, tcp_tmr(), now handles both TCP timers.
332
333 ++ Bugfixes:
334
335 * A bug in tcp_parseopt() could cause the stack to hang because of a
336 malformed TCP option.
337
338 * The address of new connections in the accept() function in the BSD
339 socket library was not handled correctly.
340
341 * pbuf_dechain() did not update the ->tot_len field of the tail.
342
343 * Aborted TCP connections were not handled correctly in all
344 situations.
345
346 ++ Other changes:
347
348 * All protocol header structs are now packed.
349
350 * The ->len field in the tcp_seg structure now counts the actual
351 amount of data, and does not add one for SYN and FIN segments.
352
353(0.5.1) Changes since version 0.5.0
354
355 ++ New features:
356
357 * Possible to run as a user process under Linux.
358
359 * Preliminary support for cross platform packed structs.
360
361 * ARP timer now implemented.
362
363 ++ Bugfixes:
364
365 * TCP output queue length was badly initialized when opening
366 connections.
367
368 * TCP delayed ACKs were not sent correctly.
369
370 * Explicit initialization of BSS segment variables.
371
372 * read() in BSD socket library could drop data.
373
374 * Problems with memory alignment.
375
376 * Situations when all TCP buffers were used could lead to
377 starvation.
378
379 * TCP MSS option wasn't parsed correctly.
380
381 * Problems with UDP checksum calculation.
382
383 * IP multicast address tests had endianess problems.
384
385 * ARP requests had wrong destination hardware address.
386
387 ++ Other changes:
388
389 * struct eth_addr changed from u16_t[3] array to u8_t[6].
390
391 * A ->linkoutput() member was added to struct netif.
392
393 * TCP and UDP ->dest_* struct members where changed to ->remote_*.
394
395 * ntoh* macros are now null definitions for big endian CPUs.
396
397(0.5.0) Changes since version 0.4.2
398
399 ++ New features:
400
401 * Redesigned operating system emulation layer to make porting easier.
402
403 * Better control over TCP output buffers.
404
405 * Documenation added.
406
407 ++ Bugfixes:
408
409 * Locking issues in buffer management.
410
411 * Bugfixes in the sequential API.
412
413 * IP forwarding could cause memory leakage. This has been fixed.
414
415 ++ Other changes:
416
417 * Directory structure somewhat changed; the core/ tree has been
418 collapsed.
419
420(0.4.2) Changes since version 0.4.1
421
422 ++ New features:
423
424 * Experimental ARP implementation added.
425
426 * Skeleton Ethernet driver added.
427
428 * Experimental BSD socket API library added.
429
430 ++ Bugfixes:
431
432 * In very intense situations, memory leakage could occur. This has
433 been fixed.
434
435 ++ Other changes:
436
437 * Variables named "data" and "code" have been renamed in order to
438 avoid name conflicts in certain compilers.
439
440 * Variable++ have in appliciable cases been translated to ++variable
441 since some compilers generate better code in the latter case.
442
443(0.4.1) Changes since version 0.4
444
445 ++ New features:
446
447 * TCP: Connection attempts time out earlier than data
448 transmissions. Nagle algorithm implemented. Push flag set on the
449 last segment in a burst.
450
451 * UDP: experimental support for UDP-Lite extensions.
452
453 ++ Bugfixes:
454
455 * TCP: out of order segments were in some cases handled incorrectly,
456 and this has now been fixed. Delayed acknowledgements was broken
457 in 0.4, has now been fixed. Binding to an address that is in use
458 now results in an error. Reset connections sometimes hung an
459 application; this has been fixed.
460
461 * Checksum calculation sometimes failed for chained pbufs with odd
462 lengths. This has been fixed.
463
464 * API: a lot of bug fixes in the API. The UDP API has been improved
465 and tested. Error reporting and handling has been
466 improved. Logical flaws and race conditions for incoming TCP
467 connections has been found and removed.
468
469 * Memory manager: alignment issues. Reallocating memory sometimes
470 failed, this has been fixed.
471
472 * Generic library: bcopy was flawed and has been fixed.
473
474 ++ Other changes:
475
476 * API: all datatypes has been changed from generic ones such as
477 ints, to specified ones such as u16_t. Functions that return
478 errors now have the correct type (err_t).
479
480 * General: A lot of code cleaned up and debugging code removed. Many
481 portability issues have been fixed.
482
483 * The license was changed; the advertising clause was removed.
484
485 * C64 port added.
486
487 * Thanks: Huge thanks go to Dagan Galarneau, Horst Garnetzke, Petri
488 Kosunen, Mikael Caleres, and Frits Wilmink for reporting and
489 fixing bugs!
490
491(0.4) Changes since version 0.3.1
492
493 * Memory management has been radically changed; instead of
494 allocating memory from a shared heap, memory for objects that are
495 rapidly allocated and deallocated is now kept in pools. Allocation
496 and deallocation from those memory pools is very fast. The shared
497 heap is still present but is used less frequently.
498
499 * The memory, memory pool, and packet buffer subsystems now support
500 4-, 2-, or 1-byte alignment.
501
502 * "Out of memory" situations are handled in a more robust way.
503
504 * Stack usage has been reduced.
505
506 * Easier configuration of lwIP parameters such as memory usage,
507 TTLs, statistics gathering, etc. All configuration parameters are
508 now kept in a single header file "lwipopts.h".
509
510 * The directory structure has been changed slightly so that all
511 architecture specific files are kept under the src/arch
512 hierarchy.
513
514 * Error propagation has been improved, both in the protocol modules
515 and in the API.
516
517 * The code for the RTXC architecture has been implemented, tested
518 and put to use.
519
520 * Bugs have been found and corrected in the TCP, UDP, IP, API, and
521 the Internet checksum modules.
522
523 * Bugs related to porting between a 32-bit and a 16-bit architecture
524 have been found and corrected.
525
526 * The license has been changed slightly to conform more with the
527 original BSD license, including the advertisement clause.
528
529(0.3.1) Changes since version 0.3
530
531 * Fix of a fatal bug in the buffer management. Pbufs with allocated
532 RAM never returned the RAM when the pbuf was deallocated.
533
534 * TCP congestion control, window updates and retransmissions did not
535 work correctly. This has now been fixed.
536
537 * Bugfixes in the API.
538
539(0.3) Changes since version 0.2
540
541 * New and improved directory structure. All include files are now
542 kept in a dedicated include/ directory.
543
544 * The API now has proper error handling. A new function,
545 netconn_err(), now returns an error code for the connection in
546 case of errors.
547
548 * Improvements in the memory management subsystem. The system now
549 keeps a pointer to the lowest free memory block. A new function,
550 mem_malloc2() tries to allocate memory once, and if it fails tries
551 to free some memory and retry the allocation.
552
553 * Much testing has been done with limited memory
554 configurations. lwIP now does a better job when overloaded.
555
556 * Some bugfixes and improvements to the buffer (pbuf) subsystem.
557
558 * Many bugfixes in the TCP code:
559
560 - Fixed a bug in tcp_close().
561
562 - The TCP receive window was incorrectly closed when out of
563 sequence segments was received. This has been fixed.
564
565 - Connections are now timed-out of the FIN-WAIT-2 state.
566
567 - The initial congestion window could in some cases be too
568 large. This has been fixed.
569
570 - The retransmission queue could in some cases be screwed up. This
571 has been fixed.
572
573 - TCP RST flag now handled correctly.
574
575 - Out of sequence data was in some cases never delivered to the
576 application. This has been fixed.
577
578 - Retransmitted segments now contain the correct acknowledgment
579 number and advertised window.
580
581 - TCP retransmission timeout backoffs are not correctly computed
582 (ala BSD). After a number of retransmissions, TCP now gives up
583 the connection.
584
585 * TCP connections now are kept on three lists, one for active
586 connections, one for listening connections, and one for
587 connections that are in TIME-WAIT. This greatly speeds up the fast
588 timeout processing for sending delayed ACKs.
589
590 * TCP now provides proper feedback to the application when a
591 connection has been successfully set up.
592
593 * More comments have been added to the code. The code has also been
594 somewhat cleaned up.
595
596(0.2) Initial public release.