1HISTORY
2
3(git master)
4
5  * [Enter new changes just after this line - do not remove this line]
6
7(STABLE-2.0.3)
8
9  ++ Bugfixes:
10
11  2017-09-11: Simon Goldschmidt
12  * tcp_in.c: fix bug #51937 (leaking tcp_pcbs on passive close with unacked data)
13
14  2017-08-02: Abroz Bizjak/Simon Goldschmidt
15  * multiple fixes in IPv4 reassembly (leading to corrupted datagrams received)
16
17  2017-03-30: Simon Goldschmidt
18  * dhcp.c: return ERR_VAL instead of asserting on offset-out-of-pbuf
19
20  2017-03-23: Dirk Ziegelmeier
21  * dhcp.h: fix bug #50618 (dhcp_remove_struct() macro does not work)
22
23(STABLE-2.0.2)
24
25  ++ New features:
26
27  2017-02-10: Dirk Ziegelmeier
28  * Implement task #14367: Hooks need a better place to be defined:
29    We now have a #define for a header file name that is #included in every .c
30    file that provides hooks.
31
32  2017-02-10: Simon Goldschmidt
33  * tcp_close does not fail on memory error (instead, FIN is sent from tcp_tmr)
34
35  ++ Bugfixes:
36
37  2017-03-08
38  * tcp: do not keep sending SYNs when getting ACKs
39
40  2017-03-08: Joel Cunningham
41  * tcp: Initialize ssthresh to TCP_SND_BUF (bug #50476)
42
43  2017-03-01: Simon Goldschmidt
44  * httpd: LWIP_HTTPD_POST_MANUAL_WND: fixed double-free when httpd_post_data_recved
45    is called nested from httpd_post_receive_data() (bug #50424)
46
47  2017-02-28: David van Moolenbroek/Simon Goldschmidt
48  * tcp: fixed bug #50418: LWIP_EVENT_API: fix invalid calbacks for SYN_RCVD pcb
49
50  2017-02-17: Simon Goldschmidt
51  * dns: Improved DNS_LOCAL_HOSTLIST interface (bug #50325)
52
53  2017-02-16: Simon Goldschmidt
54  * LWIP_NETCONN_FULLDUPLEX: fixed shutdown during write (bug #50274)
55
56  2017-02-13: Simon Goldschmidt/Dirk Ziegelmeier
57  * For tiny targtes, LWIP_RAND is optional (fix compile time checks)
58
59  2017-02-10: Simon Goldschmidt
60  * tcp: Fixed bug #47485 (tcp_close() should not fail on memory error) by retrying
61    to send FIN from tcp_fasttmr
62
63  2017-02-09: Simon Goldschmidt
64  * sockets: Fixed bug #44032 (LWIP_NETCONN_FULLDUPLEX: select might work on
65    invalid/reused socket) by not allowing to reallocate a socket that has
66    "select_waiting != 0"
67
68  2017-02-09: Simon Goldschmidt
69  * httpd: Fixed bug #50059 (httpd LWIP_HTTPD_SUPPORT_11_KEEPALIVE vs.
70    LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED)
71
72  2017-02-08: Dirk Ziegelmeier
73  * Rename "IPv6 mapped IPv4 addresses" to their correct name from RFC4191:
74    "IPv4-mapped IPv6 address"
75
76  2017-02-08: Luc Revardel
77  * mld6.c: Fix bug #50220 (mld6_leavegroup does not send ICMP6_TYPE_MLD, even
78    if last reporter)
79
80  2017-02-08: David van Moolenbroek
81  * ip6.c: Patch #9250: fix source substitution in ip6_output_if()
82
83  2017-02-08: Simon Goldschmidt
84  * tcp_out.c: Fixed bug #50090 (last_unsent->oversize_left can become wrong value
85    in tcp_write error path)
86
87  2017-02-02: Dirk Ziegelmeier
88  * Fix bug #50206: UDP Netconn bind to IP6_ADDR_ANY fails
89
90  2017-01-18: Dirk Ziegelmeier
91  * Fix zero-copy RX, see bug bug #50064. PBUF_REFs were not supported as ARP requests.
92
93  2017-01-15: Axel Lin, Dirk Ziegelmeier
94  * minor bug fixes in mqtt
95
96  2017-01-11: Knut Andre Tidemann
97  * sockets/netconn: fix broken default ICMPv6 handling of checksums
98
99(STABLE-2.0.1)
100
101  ++ New features:
102
103  2016-12-31: Simon Goldschmidt
104  * tcp.h/.c: added function tcp_listen_with_backlog_and_err() to get the error
105    reason when listening fails (bug #49861)
106
107  2016-12-20: Erik Andersen
108  * Add MQTT client
109
110  2016-12-14: Jan Breuer:
111  * opt.h, ndc.h/.c: add support for RDNSS option (as per RFC 6106)
112
113  2016-12-14: David van Moolenbroek
114  * opt.h, nd6.c: Added LWIP_HOOK_ND6_GET_GW()
115
116  2016-12-09: Dirk Ziegelmeier
117  * ip6_frag.c: Implemented support for LWIP_NETIF_TX_SINGLE_PBUF
118
119  2016-12-09: Simon Goldschmidt
120  * dns.c: added one-shot multicast DNS queries
121
122  2016-11-24: Ambroz Bizjak, David van Moolenbroek
123  * tcp_out.c: Optimize passing contiguous nocopy buffers to tcp_write (bug #46290)
124
125  2016-11-16: Dirk Ziegelmeier
126  * sockets.c: added support for IPv6 mapped IPv4 addresses
127
128  ++ Bugfixes:
129
130  2016-12-16: Thomas Mueller
131  * api_lib.c: fixed race condition in return value of netconn_gethostbyname()
132    (and thus also lwip_gethostbyname/_r() and lwip_getaddrinfo())
133
134  2016-12-15: David van Moolenbroek
135  * opt.h, tcp: added LWIP_HOOK_TCP_ISN() to implement less predictable initial
136    sequence numbers (see contrib/addons/tcp_isn for an example implementation)
137
138  2016-12-05: Dirk Ziegelmeier
139  * fixed compiling with IPv4 disabled (IPv6 only case)
140
141  2016-11-28: Simon Goldschmidt
142  * api_lib.c: fixed bug #49725 (send-timeout: netconn_write() can return
143    ERR_OK without all bytes being written)
144
145  2016-11-28: Ambroz Bizjak
146  * tcpi_in.c: fixed bug #49717 (window size in received SYN and SYN-ACK
147    assumed scaled)
148
149  2016-11-25: Simon Goldschmidt
150  * dhcp.c: fixed bug #49676 (Possible endless loop when parsing dhcp options)
151
152  2016-11-23: Dirk Ziegelmeier
153  * udp.c: fixed bug #49662: multicast traffic is now only received on a UDP PCB
154   (and therefore on a UDP socket/netconn) when the PCB is bound to IP_ADDR_ANY
155
156  2016-11-16: Dirk Ziegelmeier
157  * *: Fixed dual-stack behaviour, IPv6 mapped IPv4 support in socket API
158
159  2016-11-14: Joel Cunningham
160  * tcp_out.c: fixed bug #49533 (start persist timer when unsent seg can't fit
161    in window)
162
163  2016-11-16: Roberto Barbieri Carrera
164  * autoip.c: fixed bug #49610 (sometimes AutoIP fails to reuse the same address)
165
166  2016-11-11: Dirk Ziegelmeier
167  * sockets.c: fixed bug #49578 (dropping multicast membership does not work
168    with LWIP_SOCKET_OFFSET)
169
170(STABLE-2.0.0)
171
172  ++ New features:
173
174  2016-07-27: Simon Goldschmidt
175  * opt.h, timeouts.h/.c: added LWIP_TIMERS_CUSTOM to override the default
176    implementation of timeouts
177
178  2016-07-xx: Dirk Ziegelmeier
179  * Large overhaul of doxygen documentation
180
181  2016-04-05: Simon Goldschmidt
182  * timers.h/.c: prepare for overriding current timeout implementation: all
183    stack-internal caclic timers are avaliable in the lwip_cyclic_timers array
184
185  2016-03-23: Simon Goldschmidt
186  * tcp: call accept-callback with ERR_MEM when allocating a pcb fails on
187    passive open to inform the application about this error
188    ATTENTION: applications have to handle NULL pcb in accept callback!
189
190  2016-02-22: Ivan Delamer
191  * Initial 6LoWPAN support
192
193  2016-02-XX to 2016-03-XX: Dirk Ziegelmeier
194  * Cleanup TCPIP thread sync methods in a way that it is possibe to use them
195    in arbitrary code that needs things to be done in TCPIP thread. Used to
196    decouple netconn, netif, ppp and 6LoWPAN from LWIP core.
197
198  2016-02-XX: Dirk Ziegelmeier
199  * Implement dual-stack support in RAW, UDP and TCP. Add new IP address
200    type IPADDR_ANY_TYPE for this. Netconn/Socket API: Dual-stack is
201    automatically supported when an IPv6 netconn/socket is created.
202
203  2015-12-26: Martin Hentschel and Dirk Ziegelmeier
204  * Rewrite SNMP agent. SNMPv2c + MIB compiler.
205
206  2015-11-12: Dirk Ziegelmeier
207  * Decouple SNMP stack from lwIP core and move stack to apps/ directory.
208    Breaking change: Users have to call snmp_init() now!
209
210  2015-11-12: Dirk Ziegelmeier
211  * Implement possibility to declare private memory pools. This is useful to
212    decouple some apps from the core (SNMP stack) or make contrib app usage
213    simpler (httpserver_raw)
214
215  2015-10-09: Simon Goldschmidt
216  * started to move "private" header files containing implementation details to
217    "lwip/priv/" include directory to seperate the API from the implementation.
218
219  2015-10-07: Simon Goldschmidt
220  * added sntp client as first "supported" application layer protocol implementation
221    added 'apps' folder
222
223  2015-09-30: Dirk Ziegelmeier
224  * snmp_structs.h, mib_structs.c, mib2.c: snmp: fixed ugly inheritance
225    implementation by aggregating the "base class" (struct mib_node) in all
226    derived node classes to get more type-safe code
227
228  2015-09-23: Simon Goldschmidt
229  * netif.h/.c, nd6.c: task #13729: Convert netif addresses (IPv4 & IPv6) to
230    ip_addr_t (so they can be used without conversion/temporary storage)
231
232  2015-09-08: Dirk Ziegelmeier
233  * snmp: Separate mib2 counter/table callbacks from snmp agent. This both cleans
234    up the code and should allow integration of a 3rd party agent/mib2. Simple
235    counters are kept in MIB2_STATS, tree/table change function prototypes moved to
236    snmp_mib2.h.
237
238  2015-09-03: Simon Goldschmidt
239  * opt.h, dns.h/.c: DNS/IPv6: added support for AAAA records
240
241  2015-09-01: Simon Goldschmidt
242  * task #12178: hardware checksum capabilities can be configured per netif
243   (use NETIF_SET_CHECKSUM_CTRL() in your netif's init function)
244
245  2015-08-30: Simon Goldschmidt
246  * PBUF_REF with "custom" pbufs is now supported for RX pbufs (see pcapif in
247    contrib for an example, LWIP_SUPPORT_CUSTOM_PBUF is required)
248
249  2015-08-30: Simon Goldschmidt
250  * support IPv4 source based routing: define LWIP_HOOK_IP4_ROUTE_SRC to point
251    to a routing function
252
253  2015-08-05: Simon Goldschmidt
254  * many files: allow multicast socket options IP_MULTICAST_TTL, IP_MULTICAST_IF
255    and IP_MULTICAST_LOOP to be used without IGMP
256
257  2015-04-24: Simon Goldschmidt
258  * dhcp.h/c, autoip.h/.c: added functions dhcp/autoip_supplied_address() to
259    check for the source of address assignment (replacement for NETIF_FLAG_DHCP)
260
261  2015-04-10: Simon Goldschmidt
262  * many files: task #13480: added LWIP_IPV4 define - IPv4 can be disabled,
263    leaving an IPv6-only stack
264
265  2015-04-09: Simon Goldschmidt
266  * nearly all files: task #12722 (improve IPv4/v6 address handling): renamed
267    ip_addr_t to ip4_addr_t, renamed ipX_addr_t to ip_addr_t and added IP
268    version; ip_addr_t is used for all generic IP addresses for the API,
269    ip(4/6)_addr_t are only used internally or when initializing netifs or when
270    calling version-related functions
271
272  2015-03-24: Simon Goldschmidt
273  * opt.h, ip4_addr.h, ip4.c, ip6.c: loopif is not required for loopback traffic
274    any more but passed through any netif (ENABLE_LOOPBACK has to be enabled)
275
276  2015-03-23: Simon Goldschmidt
277  * opt.h, etharp.c: with ETHARP_TABLE_MATCH_NETIF== 1, duplicate (Auto)-IP
278    addresses on multiple netifs should now be working correctly (if correctly
279    addressed by routing, that is)
280
281  2015-03-23: Simon Goldschmidt
282  * etharp.c: Stable etharp entries that are about to expire are now refreshed
283    using unicast to prevent unnecessary broadcast. Only if no answer is received
284    after 15 seconds, broadcast is used.
285
286  2015-03-06: Philip Gladstone
287  * netif.h/.c: patch #8359 (Provide utility function to add an IPv6 address to
288    an interface)
289
290  2015-03-05: Simon Goldschmidt
291  * netif.c, ip4.c, dhcp.c, autoip.c: fixed bug #37068 (netif up/down handling
292    is unclear): correclty separated administrative status of a netif (up/down)
293    from 'valid address' status
294    ATTENTION: netif_set_up() now always has to be called, even when dhcp/autoip
295    is used!
296
297  2015-02-26: patch by TabascoEye
298  * netif.c, udp.h/.c: fixed bug #40753 (re-bind UDP pcbs on change of IP address)
299
300  2015-02-22: chrysn, Simon Goldschmidt
301  * *.*: Changed nearly all functions taking 'ip(X)_addr_t' pointer to take
302    const pointers (changed user callbacks: raw_recv_fn, udp_recv_fn; changed
303    port callbacks: netif_output_fn, netif_igmp_mac_filter_fn)
304
305  2015-02-19: Ivan Delamer
306  * netif.h, dhcp.c: Removed unused netif flag for DHCP. The preferred way to evaluate
307    if DHCP is active is through netif->dhcp field.
308
309  2015-02-19: Ivan Delamer
310  * netif.h, slipif.c, ppp.c: Removed unused netif flag for point to point connections
311
312  2015-02-18: Simon Goldschmidt
313  * api_lib.c: fixed bug #37958 "netconn API doesn't handle correctly
314    connections half-closed by peer"
315
316  2015-02-18: Simon Goldschmidt
317  * tcp.c: tcp_alloc() prefers killing CLOSING/LAST_ACK over active connections
318    (see bug #39565)
319
320  2015-02-16: Claudius Zingerli, Sergio Caprile
321  * opt.h, dhcp.h/.c: patch #8361 "Add support for NTP option in DHCP"
322
323  2015-02-14: Simon Goldschmidt
324  * opt.h, snmp*: added support for write-access community and dedicated
325    community for sending traps
326
327  2015-02-13: Simon Goldschmidt
328  * opt.h, memp.c: added hook LWIP_HOOK_MEMP_AVAILABLE() to get informed when
329    a memp pool was empty and an item is now available
330
331  2015-02-13: Simon Goldschmidt
332  * opt.h, pbuf.h/.c, etharp.c: Added the option PBUF_LINK_ENCAPSULATION_HLEN to
333    allocate additional header space for TX on netifs requiring additional headers
334
335  2015-02-12: chrysn
336  * timers.h/.c: introduce sys_timeouts_sleeptime (returns the time left before
337    the next timeout is due, for NO_SYS==1)
338
339  2015-02-11: Nick van Ijzendoorn
340  * opt.h, sockets.h/c: patch #7702 "Include ability to increase the socket number
341    with defined offset"
342
343  2015-02-11: Frederick Baksik
344  * opt.h, def.h, others: patch #8423 "arch/perf.h" should be made an optional item
345
346  2015-02-11: Simon Goldschmidt
347  * api_msg.c, opt.h: started to implement fullduplex sockets/netconns
348    (note that this is highly unstable yet!)
349
350  2015-01-17: Simon Goldschmidt
351  * api: allow enabling socket API without (public) netconn API - netconn API is
352    still used by sockets, but keeping it private (static) should allow better
353    compiler optimizations
354
355  2015-01-16: Simon Goldschmidt
356  * tcp_in.c: fixed bug #20506 "Initial congestion window is very small" again
357    by implementing the calculation formula from RFC3390
358
359  2014-12-10: Simon Goldschmidt
360  * api: added option LWIP_NETCONN_SEM_PER_THREAD to use a semaphore per thread
361    instead of using one per netconn and per select call
362
363  2014-12-08: Simon Goldschmidt
364  * ip6.h: fixed bug #43778: IPv6 header version not set on 16-bit platform
365    (macro IP6H_VTCFL_SET())
366
367  2014-12-08: Simon Goldschmidt
368  * icmp.c, ip4.c, pbuf.c, udp.c, pbuf.h: task #11472 Support PBUF_REF for RX
369    (IPv6 and IPv4/v6 reassembly might not work yet)
370
371  2014-11-06: Simon Goldschmidt
372  * sockets.c/.h, init.c: lwip_socket_init() is not needed any more
373    -> compatibility define
374
375  2014-09-16: Simon Goldschmidt
376  * dns.c, opt.h: reduced ram usage by parsing DNS responses in place
377
378  2014-09-16: Simon Goldschmidt
379  * pbuf.h/.c: added pbuf_take_at() and pbuf_put_at()
380
381  2014-09-15: Simon Goldschmidt
382  * dns.c: added source port randomization to make the DNS client more robust
383    (see bug #43144)
384
385  2013-09-02: Simon Goldschmidt
386  * arch.h and many other files: added optional macros PACK_STRUCT_FLD_8() and
387    PACK_STRUCT_FLD_S() to prevent gcc 4 from warning about struct members that
388    do not need packing
389
390  2013-08-19: Simon Goldschmidt
391  * netif.h: bug #42998: made NETIF_MAX_HWADDR_LEN overridable for some special
392    networks
393
394  2013-03-17: Simon Goldschmidt (patch by Ghobad Emadi)
395  * opt.h, etharp.c: Added LWIP_HOOK_ETHARP_GET_GW to implement IPv4 routing with
396    multiple gateways
397
398  2013-04-20: Fatih Asici
399  * opt.h, etharp.h/.c: patch #7993: Added support for transmitting packets
400    with VLAN headers via hook function LWIP_HOOK_VLAN_SET and to check them
401    via hook function LWIP_HOOK_VLAN_CHECK
402
403  2014-02-20: Simon Goldschmidt (based on patch by Artem Pisarenko)
404  * patch #7885: modification of api modules to support FreeRTOS-MPU
405    (don't pass stack-pointers to other threads)
406
407  2014-02-05: Simon Goldschmidt (patch by "xtian" and "alex_ab")
408  * patch #6537/#7858: TCP window scaling support
409
410  2014-01-17: Jiri Engelthaler
411  * icmp, icmp6, opt.h: patch #8027: Completed HW checksuming for IPv4 and
412    IPv6 ICMP's
413
414  2012-08-22: Sylvain Rochet
415  * New PPP stack for lwIP, developed in ppp-new branch.
416    Based from pppd 2.4.5, released 2009-11-17, with huge changes to match
417    code size and memory requirements for embedded devices, including:
418    - Gluing together the previous low-level PPP code in lwIP to pppd 2.4.5, which
419      is more or less what pppd sys-* files are, so that we get something working
420      using the unix port.
421    - Merged some patchs from lwIP Git repository which add interesting features
422      or fix bugs.
423    - Merged some patchs from Debian pppd package which add interesting features
424      or fix bugs.
425    - Ported PPP timeout handling to the lwIP timers system
426    - Disabled all the PPP code using filesystem access, replaced in necessary cases
427      to configuration variables.
428    - Disabled all the PPP code forking processes.
429    - Removed IPX support, lwIP does not support IPX.
430    - Ported and improved random module from the previous PPP port.
431    - Removed samba TDB (file-driven database) usage, because it needs a filesystem.
432    - MS-CHAP required a DES implementation, we added the latest PolarSSL DES
433      implementation which is under a BSD-ish license.
434    - Also switched to PolarSSL MD4,MD5,SHA1 implementations, which are meant to be
435      used in embedded devices with reduced memory footprint.
436    - Removed PPP configuration file parsing support.
437    - Added macro definition EAP_SUPPORT to make EAP support optional.
438    - Added macro definition CHAP_SUPPORT to make CHAP support optional.
439    - Added macro definition MSCHAP_SUPPORT to make MSCHAP support optional.
440    - Added macro definition PAP_SUPPORT to make PAP support optional.
441    - Cleared all Linux syscall calls.
442    - Disabled demand support using a macro, so that it can be ported later.
443    - Disabled ECP support using a macro, so that it can be ported later.
444    - Disabled CCP support using a macro, so that it can be ported later.
445    - Disabled CBCP support using a macro, so that it can be ported later.
446    - Disabled LQR support using a macro, so that it can be ported later.
447    - Print packet debug feature optional, through PRINTPKT_SUPPORT
448    - Removed POSIX signal usage.
449    - Fully ported PPPoS code from the previous port.
450    - Fully ported PPPoE code from the previous port.
451    - Fully ported VJ compression protocol code from the previous port.
452    - Removed all malloc()/free() use from PPP, replaced by stack usage or PBUF.
453    - Disabled PPP server support using a macro, so that it can be ported later.
454    - Switched all PPP debug to lwIP debug system.
455    - Created PPP Control Block (PPP PCB), removed PPP unit integer everywhere,
456      removed all global variables everywhere, did everything necessary for
457      the PPP stack to support more than one PPP session (pppd only support
458      one session per process).
459    - Removed the statically allocated output buffer, now using PBUF.
460    - Improved structure size of all PPP modules, deep analyze of code to reduce
461      variables size to the bare minimum. Switched all boolean type (char type in
462      most architecture) to compiler generated bitfields.
463    - Added PPP IPv6 support, glued lwIP IPv6 support to PPP.
464    - Now using a persistent netif interface which can then be used in lwIP
465      functions requiring a netif.
466    - Now initializing PPP in lwip_init() function.
467    - Reworked completely the PPP state machine, so that we don't end up in
468      anymore in inconsistent state, especially with PPPoE.
469    - Improved the way we handle PPP reconnection after disconnect, cleaning
470      everything required so that we start the PPP connection again from a
471      clean state.
472    - Added PPP holdoff support, allow the lwIP user to wait a little bit before
473      reconnecting, prevents connection flood, especially when using PPPoL2TP.
474    - Added PPPoL2TP LAC support (a.k.a. UDP tunnels), adding a VPN client
475      feature to lwIP, L2TP being a widely used tunnel protocol.
476    - Switched all used PPP types to lwIP types (u8t, u16t, u32t, ...)
477    - Added PPP API "sequential" thread-safe API, based from NETIFAPI.
478
479  2011-07-21: Simon Goldschmidt
480  * sockets.c, opt.h: (bug #30185): added LWIP_FIONREAD_LINUXMODE that makes
481    ioctl/FIONREAD return the size of the next pending datagram.
482
483  2011-05-25: Simon Goldschmidt
484  * again nearly the whole stack, renamed ip.c to ip4.c, ip_addr.c to ip4_addr.c,
485    combined ipv4/ipv6 inet_chksum.c, added ip.h, ip_addr.h: Combined IPv4
486    and IPv6 code where possible, added defines to access IPv4/IPv6 in non-IP
487    code so that the code is more readable.
488
489  2011-05-17: Patch by Ivan Delamer (only checked in by Simon Goldschmidt)
490  * nearly the whole stack: Finally, we got decent IPv6 support, big thanks to
491    Ivan! (this is work in progress: we're just post release anyway :-)
492
493
494  ++ Bugfixes:
495
496  2016-08-23: Simon Goldschmidt
497  * etharp: removed ETHARP_TRUST_IP_MAC since it is insecure and we don't need
498    it any more after implementing unicast ARP renewal towards arp entry timeout
499
500  2016-07-20: Simon Goldschmidt
501  * memp.h/.c: fixed bug #48442 (memp stats don't work for MEMP_MEM_MALLOC)
502
503  2016-07-21: Simon Goldschmidt (patch by Ambroz Bizjak)
504  * tcp_in.c, tcp_out.c: fixed bug #48543 (TCP sent callback may prematurely
505    report sent data when only part of a segment is acked) and don't include
506    SYN/FIN in snd_buf counter
507
508  2016-07-19: Simon Goldschmidt
509  * etharp.c: fixed bug #48477 (ARP input packet might update static entry)
510
511  2016-07-11: Simon Goldschmidt
512  * tcp_in.c: fixed bug #48476 (TCP sent callback called wrongly due to picking
513    up old pcb->acked
514
515  2016-06-30: Simon Goldschmidt (original patch by Fabian Koch)
516  * tcp_in.c: fixed bug #48170 (Vulnerable to TCP RST spoofing)
517
518  2016-05-20: Dirk Ziegelmeier
519  * sntp.h/.c: Fix return value of sntp_getserver() call to return a pointer
520
521  2016-04-05: Simon Goldschmidt (patch by Philip Gladstone)
522  * udp.c: patch #8358: allow more combinations of listening PCB for IPv6
523
524  2016-04-05: Simon Goldschmidt
525  * netconn/socket API: fixed bug# 43739 (Accept not reporting errors about
526    aborted connections): netconn_accept() returns ERR_ABRT (sockets: ECONNABORTED)
527    for aborted connections, ERR_CLSD (sockets: EINVAL) if the listening netconn
528    is closed, which better seems to follow the standard.
529
530  2016-03-23: Florent Matignon
531  * dhcp.c: fixed bug #38203: DHCP options are not recorded in all DHCP ack messages
532
533  2016-03-22: Simon Goldschmidt
534  * tcp: changed accept handling to be done internally: the application does not
535    have to call tcp_accepted() any more. Instead, when delaying accept (e.g. sockets
536    do), call tcp_backlog_delayed()/tcp_backlog_accepted() (fixes bug #46696)
537
538  2016-03-22: Simon Goldschmidt
539  * dns.c: ignore dns response parsing errors, only abort resolving for correct
540    responses or error responses from correct server (bug #47459)
541
542  2016-03-17: Simon Goldschmidt
543  * api_msg.c: fixed bug #47448 (netconn/socket leak if RST is received during close)
544
545  2016-03-17: Joel Cunningham
546  * api_msg.c: don't fail closing a socket/netconn when failing to allocate the
547    FIN segment; blocking the calling thread for a while is better than risking
548    leaking a netconn/socket (see bug #46701)
549
550  2016-03-16: Joel Cunningham
551  * tcp_out.c: reset rto timer on fast retransmission
552
553  2016-03-16: Deomid Ryabkov
554  * tcp_out.c: fixed bug #46384 Segment size calculation bug with MSS != TCP_MSS
555
556  2016-03-05: Simon Goldschmidt
557  * err.h/.c, sockets.c: ERR_IF is not necessarily a fatal error
558
559  2015-11-19: fix by Kerem Hadimli
560  * sockets.c: fixed bug #46471: lwip_accept() leaks socket descriptors if new
561    netconn was already closed because of peer behavior
562
563  2015-11-12: fix by Valery Ushakov
564  * tcp_in.c: fixed bug #46365 tcp_accept_null() should call tcp_abort()
565
566  2015-10-02: Dirk Ziegelmeier/Simon Goldschmidt
567  * snmp: cleaned up snmp structs API (fixed race conditions from bug #46089,
568    reduce ram/rom usage of tables): incompatible change for private MIBs
569
570  2015-09-30: Simon Goldschmidt
571  * ip4_addr.c: fixed bug #46072: ip4addr_aton() does not check the number range
572    of all address parts
573
574  2015-08-28: Simon Goldschmidt
575  * tcp.c, tcp_in.c: fixed bug #44023: TCP ssthresh value is unclear: ssthresh
576    is set to the full send window for active open, too, and is updated once
577    after SYN to ensure the correct send window is used
578
579  2015-08-28: Simon Goldschmidt
580  * tcp: fixed bug #45559: Window scaling casts u32_t to u16_t without checks
581
582  2015-08-26: Simon Goldschmidt
583  * ip6_frag.h/.c: fixed bug bug #41009: IPv6 reassembly broken on 64-bit platforms:
584    define IPV6_FRAG_COPYHEADER==1 on these platforms to copy the IPv6 header
585    instead of referencing it, which gives more room for struct ip6_reass_helper
586
587  2015-08-25: Simon Goldschmidt
588  * sockets.c: fixed bug #45827: recvfrom: TCP window is updated with MSG_PEEK
589
590  2015-08-20: Manoj Kumar
591  * snmp_msg.h, msg_in.c: fixed bug #43790: Sending octet string of Length >255
592    from SNMP agent
593
594  2015-08-19: Jens Nielsen
595  * icmp.c, ip4.c, tcp_in.c, udp.c, raw.c: fixed bug #45120: Broadcast & multiple
596    interfaces handling
597
598  2015-08-19: Simon Goldschmidt (patch by "Sandra")
599  * dns.c: fixed bug #45004: dns response without answer might be discarded
600
601  2015-08-18: Chrysn
602  * timers.c: patch #8704 fix sys_timeouts_sleeptime function
603
604  2015-07-01: Erik Ekman
605  * puf.c: fixed bug #45454 (pbuf_take_at() skips write and returns OK if offset
606    is at start of pbuf in chain)
607
608  2015-05-19: Simon Goldschmidt
609  * dhcp.h/.c: fixed bugs #45140 and #45141 (dhcp was not stopped correctly after
610    fixing bug #38204)
611
612  2015-03-21: Simon Goldschmidt (patch by Homyak)
613  * tcp_in.c: fixed bug #44766 (LWIP_WND_SCALE: tcphdr->wnd was not scaled in
614    two places)
615
616  2015-03-21: Simon Goldschmidt
617  * tcp_impl.h, tcp.c, tcp_in.c: fixed bug #41318 (Bad memory ref in tcp_input()
618    after tcp_close())
619
620  2015-03-21: Simon Goldschmidt
621  * tcp_in.c: fixed bug #38468 (tcp_sent() not called on half-open connection for
622    data ACKed with the same ack as FIN)
623
624  2015-03-21: Simon Goldschmidt (patch by Christoffer Lind)
625  * dhcp.h/.c: fixed bug #38204 (DHCP lease time not handled correctly)
626
627  2015-03-20: Simon Goldschmidt
628  * dhcp.c: fixed bug #38714 (Missing option and client address in DHCPRELEASE message)
629
630  2015-03-19: Simon Goldschmidt
631  * api.h, tcpip.h, api_lib.c, api_msg.c: fixed race conditions in assigning
632    netconn->last_err (fixed bugs #38121 and #37676)
633
634  2015-03-09: Simon Goldschmidt
635  * ip4.c: fixed the IPv4 part of bug #43904 (ip_route() must detect linkup status)
636
637  2015-03-04: Simon Goldschmidt
638  * nd6.c: fixed bug #43784 (a host should send at least one Router Solicitation)
639
640  2015-03-04: Valery Ushakov
641  * ip6.c: fixed bug #41094 (Byte-order bug in IPv6 fragmentation header test)
642
643  2015-03-04: Zach Smith
644  * nd6.c: fixed bug #38153 (nd6_input() byte order issues)
645
646  2015-02-26: Simon Goldschmidt
647  * netif.c, tcp.h/.c: fixed bug #44378 (TCP connections are not aborted on netif
648    remove)
649
650  2015-02-25: Simon Goldschmidt
651  * ip4.c, etharp.c: fixed bug #40177 (System hangs when dealing with corrupted
652    packets), implemented task #12357 (Ensure that malicious packets don't
653    assert-fail): improved some pbuf_header calls to not assert-fail.
654
655  2015-02-25: patch by Joel Cunningham
656  * udp.h/.c, sockets.c: fixed bug #43028 (IP_MULTICAST_TTL affects unicast
657    datagrams)
658
659  2015-02-25: patch by Greg Renda
660  * ip4_frag.c: fixed bug #38210 (ip reassembly while remove oldest datagram)
661
662  2015-02-25: Simon Goldschmidt
663  * sockets.c: fixed bug #38165 (socket with mulicast): ensure igmp membership
664    are dropped when socket (not netconn!) is closed.
665
666  2015-02-25: Simon Goldschmidt
667  * ip4.h/.c, udp.c: fixed bug #38061 (wrong multicast routing in IPv4) by
668    adding an optional default netif for multicast routing
669
670  2015-02-25: Simon Goldschmidt
671  * netconn API: fixed that netconn_connect still used message passing for
672    LWIP_TCPIP_CORE_LOCKING==1
673
674  2015-02-22: patch by Jens Nielsen
675  * icmp.c: fixed bug #38803 (Source address in broadcast ping reply)
676
677  2015-02-22: Simon Goldschmidt
678  * udp.h, sockets.c: added proper accessor functions for pcb->multicast_ip
679    (previously used by get/setsockopt only)
680
681  2015-02-18: Simon Goldschmidt
682  * sockets.c: Fixed select not reporting received FIN as 'readable' in certain
683    rare cases (bug #43779: select(), close(), and TCP retransmission error)
684
685  2015-02-17: Simon Goldschmidt
686  * err.h, sockets.c, api_msg.c: fixed bug #38853 "connect() use a wrong errno":
687    return ERR_ALREADY/EALRADY during connect, ERR_ISCONN/EISCONN when already
688    connected
689
690  2015-02-17: Simon Goldschmidt
691  * tcp_impl.h, tcp_out.c, tcp.c, api_msg.c: fixed bug #37614 "Errors from
692    ipX_output are not processed". Now tcp_output(_segment) checks for the return
693    value of ipX_output and does not try to send more on error. A netif driver
694    can call tcp_txnow() (from tcpip_thread!) to try to send again if TX buffers
695    are available again.
696
697  2015-02-14: patches by Freddie Chopin
698  * snmp*: made community writable, fixed some const pointers
699
700  2015-02-13: Simon Goldschmidt
701  * msg_in.c: fixed bug #22070 "MIB_OBJECT_WRITE_ONLY not implemented in SNMP"
702
703  2015-02-12: Simon Goldschmidt
704  * ip.h, ip4.c, ip6.c: fixed bug #36403 "ip4_input() and ip6_input() always pass
705    inp to higher layers": now the accepting netif is passed up, but the input
706    netif is available through ip_current_input_netif() if required.
707
708  2015-02-11: patch by hichard
709  * tcpip.c: fixed bug #43094 "The function tcpip_input() forget to handle IPv6"
710
711  2015-02-10: Simon Goldschmidt
712  * netconn API: fixed that netconn_close/netconn_delete still used message passing
713    for LWIP_TCPIP_CORE_LOCKING==1
714
715  2015-02-10: Simon Goldschmidt
716  * netconn/socket api: fixed bug #44225 "closing TCP socket should time out
717    eventually", implemented task #6930 "Implement SO_LINGER": closing TCP sockets
718    times out after 20 seconds or after the configured SND_TIMEOUT or depending
719    on the linger settings.
720
721  2015-01-27: Simon Goldschmidt
722  * api_msg.c: fixed that SHUT_RD followed by SHUT_WR was different to SHUT_RDWR,
723    fixed return value of lwip_netconn_do_close on unconnected netconns
724
725  2015-01-17: Simon Goldschmidt
726  * sockets.c: fixed bug #43361 select() crashes with stale FDs
727
728  2015-01-17: Simon Goldschmidt
729  * sockets.c/.h, memp_std.h: fixed bug #40788 "lwip_setsockopt_internal() crashes"
730    by rewriting set/getsockopt functions to combine checks with the actual code
731    and add more NULL checks; this also fixes that CORE_LOCKING used message
732    passing for set/getsockopt.
733
734  2014-12-19: Simon Goldschmidt
735  * opt.h, dhcp.h/.c: prevent dhcp from starting when netif link is down (only
736    when LWIP_DHCP_CHECK_LINK_UP==1, which is disabled by default for
737    compatibility reasons)
738
739  2014-12-17: Simon Goldschmidt
740  * tcp_out.c: fixed bug #43840 Checksum error for TCP_CHECKSUM_ON_COPY==1 for
741    no-copy data with odd length
742
743  2014-12-10: Simon Goldschmidt
744  * sockets.c, tcp.c, others: fixed bug #43797 set/getsockopt: SO_SNDTIMEO/SO_RCVTIMEO
745    take int as option but should take timeval (LWIP_SO_SNDRCVTIMEO_STANDARD==0 can
746    be used to revert to the old 'winsock' style behaviour)
747    Fixed implementation of SO_ACCEPTCONN to just look at the pcb state
748
749  2014-12-09: Simon Goldschmidt
750  * ip4.c: fixed bug #43596 IGMP queries from 0.0.0.0 are discarded
751
752  2014-10-21: Simon Goldschmidt (patch by Joel Cunningham and Albert Huitsing)
753  * sockts.c: fixed bugs #41495 Possible threading issue in select() and #43278
754    event_callback() handle context switch when calling sys_sem_signal()
755
756  2014-10-21: Simon Goldschmidt
757  * api_msg.c: fixed bug #38219 Assert on TCP netconn_write with sndtimeout set
758
759  2014-09-16: Kevin Cernekee
760  * dns.c: patch #8480 Fix handling of dns_seqno wraparound
761
762  2014-09-16: Simon Goldschmidt
763  * tcp_out.c: fixed bug #43192 tcp_enqueue_flags() should not check TCP_SND_QUEUELEN
764    when sending FIN
765
766  2014-09-03: Simon Goldschmidt
767  * msg_in.c: fixed bug #39355 SNMP Memory Leak in case of error
768
769  2014-09-02: Simon Goldschmidt
770  * err.h/.c, sockets.c, api_msg.c: fixed bug #43110 call getpeername() before
771    listen() will cause a error
772
773  2014-09-02: Simon Goldschmidt
774  * sockets.c: fixed bug #42117 lwip_fcntl does not set errno
775
776  2014-09-02: Simon Goldschmidt
777  * tcp.c: fixed bug #42299 tcp_abort() leaves freed pcb on tcp_bound_pcbs list
778
779  2014-08-20: Simon Goldschmidt
780  * dns.c: fixed bug #42987 lwIP is vulnerable to DNS cache poisoning due to
781    non-randomized TXIDs
782
783  2014-06-03: Simon Goldschmidt
784  * tcp_impl.h, tcp_in.c: fixed bug #37969 SYN packet dropped as short packet in
785    tcp_input function
786
787  2014-05-20: Simon Goldschmidt
788  * tcp_out.c: fixed bug #37184 tcp_write problem for pcbs in the SYN_SENT state
789
790  2014-05-19: Simon Goldschmidt
791  * *.h: Fixed bug #35874 reserved identifier violation (removed leading underscores
792    from header include guards)
793
794  2014-04-08: Simon Goldschmidt
795  * tcp.c: Fixed bug #36167 tcp server crash when client closes (maximum window)
796
797  2014-04-06: Simon Goldschmidt
798  * tcp_in.c: Fixed bug #36210 lwIP does not elicit an empty ACK when received
799    unacceptable ACK
800
801  2014-04-06: Simon Goldschmidt
802  * dhcp.c, ip4.c/.h, ip6.c/.h, udp.c/.h, ip.h: Fixed bug #41787 DHCP Discovery
803    is invalid when an IP is set to thet netif.
804
805  2014-03-14: Simon Goldschmidt
806  * tcp_out.c: Fixed bug #36153 TCP Cheksum error if LWIP_CHECKSUM_ON_COPY=1
807
808  2014-03-11: Simon Goldschmidt (patch by Mason)
809  * opt.h, sockets.c: fixed bug #35928 BSD sockets functions must set errno for
810    POSIX-compliance
811
812  2014-02-27: Simon Goldschmidt
813  * dhcp.c: fixed bug #40303 DHCP xid renewed when sending a DHCPREQUEST
814
815  2014-02-27: Simon Goldschmidt
816  * raw.c: fixed bug #41680 raw socket can not receive IPv6 packet when
817    IP_SOF_BROADCAST_RECV==1
818
819  2014-02-27: Simon Goldschmidt
820  * api_msg.c, sockets.c: fixed bug #38404 getpeeraddr returns success on
821    unconnected/listening TCP sockets
822
823  2014-02-27: Simon Goldschmidt
824  * sockets.c: fixed bug #41729 Some socket functions return Exyz instead of -1
825
826  2014-02-25: Simon Goldschmidt
827  * ip4.c: fixed bug #39514 ip_route() may return an IPv6-only interface
828
829  2014-02-25: Simon Goldschmidt, patch by Fatih Asici
830  * pbuf.c: fixed bug #39356 Wrong increment in pbuf_memfind()
831
832  2014-02-25: Simon Goldschmidt
833  * netif.c/.h, udp.c: fixed bug #39225 udp.c uses netif_matches_ip6_addr() incorrectly;
834    renamed function netif_matches_ip6_addr() to netif_get_ip6_addr_match()
835
836  2014-02-25: Simon Goldschmidt
837  * igmp.c: fixed bug #39145 IGMP membership report for 224.0.0.1
838
839  2014-02-22: Simon Goldschmidt (patch by Amir Shalem)
840  * etharp.c, opt.h: fixed bug #34681 Limit ARP queue length by ARP_QUEUE_LEN (=3)
841
842  2014-02-22: Simon Goldschmidt (patch by Amir Shalem)
843  * etharp.h/.c: fixed bug #34682 Limit ARP request flood for unresolved entry
844
845  2014-02-20: Simon Goldschmidt
846  * tcp_out.c: fixed bug #39683 Assertion "seg->tcphdr not aligned" failed with
847    MEM_ALIGNMENT = 8
848
849  2014-02-20: Simon Goldschmidt
850  * sockets.c: fixed bug #39882 No function shall set errno to 0
851
852  2014-02-20: Simon Goldschmidt
853  * mib_structs.c: fixed bug #40050 SNMP problem with MIB arrays > 255
854
855  2014-02-20: Simon Goldschmidt
856  * api.h, sockets.c: fixed bug #41499 netconn::recv_avail can overflow
857
858  2014-01-08: Stathis Voukelatos
859  * memp_std.h: patch #7928 Fixed size calculation in MALLOC memory pool
860    creation macro
861
862  2014-01-18: Brian Fahs
863  * tcp_out.c: patch #8237: tcp_rexmit_rto fails to update pcb->unsent_oversize
864    when necessary
865
866  2014-01-17: Grant Erickson, Jay Logue, Simon Goldschmidt
867  * ipv6.c, netif.c: patch #7913 Enable Support for IPv6 Loopback
868
869  2014-01-16: Stathis Voukelatos
870  * netif.c: patch #7902 Fixed netif_poll() operation when LWIP_LOOPBACK_MAX_PBUFS > 0
871
872  2014-01-14: "Freddie Chopin"
873  * snmp.h, mib2.c: fixed constness and spelling of sysdescr
874
875  2014-01-14: Simon Goldschmidt (patch by Thomas Faber)
876  * tcpip.c: patch #8241: Fix implicit declaration of ip_input with
877    LWIP_TCPIP_CORE_LOCKING_INPUT disabled
878
879  2014-01-14: chrysn
880  * timers.c: patch #8244 make timeouts usable reliably from outside of the
881    timeout routine
882
883  2014-01-10: Simon Goldschmidt
884  * ip_frag.c, ip6_frag.c: fixed bug #41041 Potential use-after-free in IPv6 reassembly
885
886  2014-01-10: Simon Goldschmidt
887  * memp.c: fixed bug #41188 Alignment error in memp_init() when MEMP_SEPARATE_POOLS==1
888
889  2014-01-10: Simon Goldschmidt
890  * tcp.c: fixed bug #39898 tcp_fasttmr() possible lock due to infinte queue process loop
891
892  2013-06-29: Simon Goldschmidt
893  * inet.h, sockets.h: partially fixed bug #37585: IPv6 compatibility (in socket structs)
894
895  2013-06-29: Simon Goldschmidt
896  * inet6.h: bug #37585/task #12600: fixed struct in6_addr.s6_addr to conform to spec
897
898  2013-04-24: patch by Liam <morepork>
899  * api_msg.c: patch #8008 Fix a potential null pointer dereference in assert
900
901  2013-04-24: Simon Goldschmidt
902  * igmp.c: fixed possible division by zero
903
904  2013-04-24: Simon Goldschmidt
905  * ip6.h, some ipv6 C files: fixed bug #38526 Coverity: Recursive Header Inclusion in ip6.h
906
907  2013-04-24: Simon Goldschmidt (patch by Emil Ljungdahl):
908  * netif.c: fixed bug #38586 netif_loop_output() "deadlocks"
909
910  2013-01-15: Simon Goldschmidt
911  * ip4.c: fixed bug #37665 ip_canforward operates on address in wrong byte order
912
913  2013-01-15: Simon Goldschmidt
914  * pbuf.h: fixed bug #38097 pbuf_free_ooseq() warning
915
916  2013-01-14: Simon Goldschmidt
917  * dns.c: fixed bug #37705 Possible memory corruption in DNS query
918
919  2013-01-11: Simon Goldschmidt
920  * raw.c: fixed bug #38066 Raw pcbs can alter packet without eating it
921
922  2012-08-22: Simon Goldschmidt
923  * memp.c: fixed bug #37166: memp_sanity check loops itself
924
925  2012-08-13: Simon Goldschmidt
926  * dhcp.c: fixed bug #36645: Calling dhcp_release before dhcp_start
927    dereferences NULL
928
929  2012-08-13: Simon Goldschmidt
930  * msg_out.c: fixed bug #36840 snmp_send_trap() NULL de-reference if traps
931    configured but no interfaces available
932
933  2012-08-13: Simon Goldschmidt
934  * dns.c: fixed bug #36899 DNS TTL 0 is cached for a long time
935
936  2012-05-11: Simon Goldschmidt (patch by Marty)
937  * memp.c: fixed bug #36412: memp.c does not compile when
938    MEMP_OVERFLOW_CHECK > zero and MEMP_SEPARATE_POOLS == 1
939
940  2012-05-03: Simon Goldschmidt (patch by Sylvain Rochet)
941  * ppp.c: fixed bug #36283 (PPP struct used on header size computation and
942    not packed)
943
944  2012-05-03: Simon Goldschmidt (patch by David Empson)
945  * ppp.c: fixed bug #36388 (PPP: checksum-only in last pbuf leads to pbuf with
946    zero length)
947
948  2012-03-25: Simon Goldschmidt
949  * api_msg.c: Fixed bug #35817: do_connect() invalidly signals op_completed
950    for UDP/RAW with LWIP_TCPIP_CORE_LOCKING==1
951
952  2012-03-25: Simon Goldschmidt
953  * api_msg.h, api_lib.c, api_msg.c, netifapi.c: fixed bug #35931: Name space
954    pollution in api_msg.c and netifapi.c
955
956  2011-08-24: Simon Goldschmidt
957  * inet6.h: fixed bug #34124 struct in6_addr does not conform to the standard
958
959
960
961(STABLE-1.4.1)
962
963  ++ New features:
964
965  2012-03-25: Simon Goldschmidt (idea by Mason)
966  * posix/*: added posix-compatibility include files posix/netdb.h and posix/sys/socket.h
967    which are a simple wrapper to the correct lwIP include files.
968
969  2012-01-16: Simon Goldschmidt
970  * opt.h, icmp.c: Added option CHECKSUM_GEN_ICMP
971
972  2011-12-17: Simon Goldschmidt
973  * ip.h: implemented API functions to access so_options of IP pcbs (UDP, TCP, RAW)
974    (fixes bug #35061)
975
976  2011-09-27: Simon Goldschmidt
977  * opt.h, tcp.c, tcp_in.c: Implemented limiting data on ooseq queue (task #9989)
978    (define TCP_OOSEQ_MAX_BYTES / TCP_OOSEQ_MAX_PBUFS in lwipopts.h)
979
980  2011-09-21: Simon Goldschmidt
981  * opt.h, api.h, api_lib.c, api_msg.h/.c, sockets.c: Implemented timeout on
982    send (TCP only, bug #33820)
983
984  2011-09-21: Simon Goldschmidt
985  * init.c: Converted runtime-sanity-checks into compile-time checks that can
986    be disabled (since runtime checks can often not be seen on embedded targets)
987
988  2011-09-11: Simon Goldschmidt
989  * ppp.h, ppp_impl.h: splitted ppp.h to an internal and external header file
990    to get a clear separation of which functions an application or port may use
991    (task #11281)
992
993 2011-09-11: Simon Goldschmidt
994  * opt.h, tcp_impl.h, tcp.c, udp.h/.c: Added a config option to randomize
995    initial local TCP/UDP ports (so that different port ranges are used after
996    a reboot; bug #33818; this one added tcp_init/udp_init functions again)
997
998  2011-09-03: Simon Goldschmidt
999  * dhcp.c: DHCP uses LWIP_RAND() for xid's (bug #30302)
1000
1001  2011-08-24: Simon Goldschmidt
1002  * opt.h, netif.h/.c: added netif remove callback (bug #32397)
1003
1004  2011-07-26: Simon Goldschmidt
1005  * etharp.c: ETHARP_SUPPORT_VLAN: add support for an external VLAN filter
1006    function instead of only checking for one VLAN (define ETHARP_VLAN_CHECK_FN)
1007
1008  2011-07-21: Simon Goldschmidt (patch by hanhui)
1009  * ip4.c, etharp.c, pbuf.h: bug #33634 ip_forward() have a faulty behaviour:
1010    Added pbuf flags to mark incoming packets as link-layer broadcast/multicast.
1011    Also added code to allow ip_forward() to forward non-broadcast packets to
1012    the input netif (set IP_FORWARD_ALLOW_TX_ON_RX_NETIF==1).
1013
1014  2011-06-26: Simon Goldschmidt (patch by Cameron Gutman)
1015  * tcp.c, tcp_out.c: bug #33604: added some more asserts to check that
1016    pcb->state != LISTEN
1017
1018   2011-05-14: Simon Goldschmidt (patch by Stéphane Lesage)
1019  * tcpip.c/.h: patch #7449 allow tcpip callback from interrupt with static
1020    memory message
1021
1022
1023  ++ Bugfixes:
1024
1025  2012-09-26: Simon Goldschmidt
1026  * api_msg.c: fixed bug #37405 'err_tcp()' uses already freed 'netconn' object
1027
1028  2012-09-26: patch by Henrik Persson
1029  * dhcp.c: patch #7843 Fix corner case with dhcp timeouts
1030
1031  2012-09-26: patch by Henrik Persson
1032  * dhcp.c: patch #7840 Segfault in dhcp_parse_reply if no end marker in dhcp packet
1033
1034  2012-08-22: Simon Goldschmidt
1035  * memp.c: fixed bug #37166: memp_sanity check loops itself
1036
1037  2012-05-08: Simon Goldschmidt
1038  * tcp_out.c: fixed bug: #36380 unsent_oversize mismatch in 1.4.1RC1 (this was
1039    a debug-check issue only)
1040
1041  2012-03-27: Simon Goldschmidt
1042  * vj.c: fixed bug #35756 header length calculation problem in ppp/vj.c
1043
1044  2012-03-27: Simon Goldschmidt (patch by Mason)
1045  * tcp_out.c: fixed bug #35945: SYN packet should provide the recv MSS not the
1046    send MSS
1047
1048  2012-03-22: Simon Goldschmidt
1049  * ip4.c: fixed bug #35927: missing refragmentaion in ip_forward
1050
1051  2012-03-20: Simon Goldschmidt (patch by Mason)
1052  * netdb.c: fixed bug #35907: lwip_gethostbyname_r returns an invalid h_addr_list
1053
1054  2012-03-12: Simon Goldschmidt (patch by Bostjan Meglic)
1055  * ppp.c: fixed bug #35809: PPP GetMask(): Compiler warning on big endian,
1056    possible bug on little endian system
1057
1058  2012-02-23: Simon Goldschmidt
1059  * etharp.c: fixed bug #35595: Impossible to send broadcast without a gateway
1060    (introduced when fixing bug# 33551)
1061
1062  2012-02-16: Simon Goldschmidt
1063  * ppp.c: fixed pbuf leak when PPP session is aborted through pppSigHUP()
1064    (bug #35541: PPP Memory Leak)
1065
1066  2012-02-16: Simon Goldschmidt
1067  * etharp.c: fixed bug #35531: Impossible to send multicast without a gateway
1068    (introduced when fixing bug# 33551)
1069
1070  2012-02-16: Simon Goldschmidt (patch by Stéphane Lesage)
1071  * msg_in.c, msg_out.c: fixed bug #35536 SNMP: error too big response is malformed
1072
1073  2012-02-15: Simon Goldschmidt
1074  * init.c: fixed bug #35537: MEMP_NUM_* sanity checks should be disabled with
1075    MEMP_MEM_MALLOC==1
1076
1077  2012-02-12: Simon Goldschmidt
1078  * tcp.h, tcp_in.c, tcp_out.c: partly fixed bug #25882: TCP hangs on
1079    MSS > pcb->snd_wnd (by not creating segments bigger than half the window)
1080
1081  2012-02-11: Simon Goldschmidt
1082  * tcp.c: fixed bug #35435: No pcb state check before adding it to time-wait
1083    queue while closing
1084
1085  2012-01-22: Simon Goldschmidt
1086  * tcp.c, tcp_in.c: fixed bug #35305: pcb may be freed too early on shutdown(WR)
1087
1088  2012-01-21: Simon Goldschmidt
1089  * tcp.c: fixed bug #34636: FIN_WAIT_2 - Incorrect shutdown of TCP pcb
1090
1091  2012-01-20: Simon Goldschmidt
1092  * dhcp.c: fixed bug #35151: DHCP asserts on incoming option lengths
1093
1094 2012-01-20: Simon Goldschmidt
1095  * pbuf.c: fixed bug #35291: NULL pointer in pbuf_copy
1096
1097  2011-11-25: Simon Goldschmidt
1098  * tcp.h/.c, tcp_impl.h, tcp_in.c: fixed bug #31177: tcp timers can corrupt
1099    tcp_active_pcbs in some cases
1100
1101  2011-11-23: Simon Goldschmidt
1102  * sys.c: fixed bug #34884: sys_msleep() body needs to be surrounded with
1103    '#ifndef sys_msleep'
1104
1105  2011-11-22: Simon Goldschmidt
1106  * netif.c, etharp.h/.c: fixed bug #34684: Clear the arp table cache when
1107    netif is brought down
1108
1109  2011-10-28: Simon Goldschmidt
1110  * tcp_in.c: fixed bug #34638: Dead code in tcp_receive - pcb->dupacks
1111
1112  2011-10-23: Simon Goldschmidt
1113  * mem.c: fixed bug #34429: possible memory corruption with
1114    LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT set to 1
1115
1116  2011-10-18: Simon Goldschmidt
1117  * arch.h, netdb.c: fixed bug #34592: lwip_gethostbyname_r uses nonstandard
1118    error value
1119
1120  2011-10-18: Simon Goldschmidt
1121  * opt.h: fixed default values of TCP_SNDLOWAT and TCP_SNDQUEUELOWAT for small
1122    windows (bug #34176 select after non-blocking send times out)
1123
1124  2011-10-18: Simon Goldschmidt
1125  * tcp_impl.h, tcp_out.c: fixed bug #34587: TCP_BUILD_MSS_OPTION doesn't
1126    consider netif->mtu, causes slow network
1127
1128  2011-10-18: Simon Goldschmidt
1129  * sockets.c: fixed bug #34581 missing parentheses in udplite sockets code
1130
1131  2011-10-18: Simon Goldschmidt
1132  * sockets.h: fixed bug #34580 fcntl() is missing in LWIP_COMPAT_SOCKETS
1133
1134  2011-10-17: Simon Goldschmidt
1135  * api_msg.c: fixed bug #34569: shutdown(SHUT_WR) crashes netconn/socket api
1136
1137  2011-10-13: Simon Goldschmidt
1138  * tcp_in.c, tcp_out.c: fixed bug #34517 (persist timer is started although no
1139    zero window is received) by starting the persist timer when a zero window is
1140    received, not when we have more data queued for sending than fits into the
1141    window
1142
1143  2011-10-13: Simon Goldschmidt
1144  * def.h, timers.c: fixed bug #34541: LWIP_U32_DIFF is unnecessarily complex
1145
1146  2011-10-13: Simon Goldschmidt
1147  * sockets.c, api_lib.c: fixed bug #34540: compiler error when CORE_LOCKING is
1148    used and not all protocols are enabled
1149
1150  2011-10-12: Simon Goldschmidt
1151  * pbuf.c: fixed bug #34534: Error in sending fragmented IP if MEM_ALIGNMENT > 4
1152
1153  2011-10-09: Simon Goldschmidt
1154  * tcp_out.c: fixed bug #34426: tcp_zero_window_probe() transmits incorrect
1155    byte value when pcb->unacked != NULL
1156
1157  2011-10-09: Simon Goldschmidt
1158  * ip4.c: fixed bug #34447 LWIP_IP_ACCEPT_UDP_PORT(dst_port) wrong
1159
1160  2011-09-27: Simon Goldschmidt
1161  * tcp_in.c, tcp_out.c: Reset pcb->unsent_oversize in 2 more places...
1162
1163  2011-09-27: Simon Goldschmidt
1164  * tcp_in.c: fixed bug #28288: Data after FIN in oos queue
1165
1166  2011-09-27: Simon Goldschmidt
1167  * dhcp.c: fixed bug #34406 dhcp_option_hostname() can overflow the pbuf
1168
1169  2011-09-24: Simon Goldschmidt
1170  * mem.h: fixed bug #34377 MEM_SIZE_F is not defined if MEM_LIBC_MALLOC==1
1171
1172  2011-09-23: Simon Goldschmidt
1173  * pbuf.h, tcp.c, tcp_in.c: fixed bug #33871: rejecting TCP_EVENT_RECV() for
1174    the last packet including FIN can lose data
1175
1176  2011-09-22: Simon Goldschmidt
1177  * tcp_impl.h: fixed bug #34355: nagle does not take snd_buf/snd_queuelen into
1178    account
1179
1180  2011-09-21: Simon Goldschmidt
1181  * opt.h: fixed default value of TCP_SND_BUF to not violate the sanity checks
1182    in init.c
1183
1184  2011-09-20: Simon Goldschmidt
1185  * timers.c: fixed bug #34337 (possible NULL pointer in sys_check_timeouts)
1186
1187  2011-09-11: Simon Goldschmidt
1188  * tcp_out.c: use pcb->mss instead of TCP_MSS for preallocate mss-sized pbufs
1189    (bug #34019)
1190
1191  2011-09-09: Simon Goldschmidt
1192  * udp.c: fixed bug #34072: UDP broadcast is received from wrong UDP pcb if
1193    udp port matches
1194
1195  2011-09-03: Simon Goldschmidt
1196  * tcp_in.c: fixed bug #33952 PUSH flag in incoming packet is lost when packet
1197    is aggregated and sent to application
1198
1199  2011-09-01: Simon Goldschmidt
1200  * opt.h: fixed bug #31809 LWIP_EVENT_API in opts.h is inconsistent compared
1201    to other options
1202
1203  2011-09-01: Simon Goldschmidt
1204  * tcp_in.c: fixed bug #34111 RST for ACK to listening pcb has wrong seqno
1205
1206  2011-08-24: Simon Goldschmidt
1207  * api_msg.c, sockets.c: fixed bug #33956 Wrong error returned when calling
1208    accept() on UDP connections
1209
1210  2011-08-24: Simon Goldschmidt
1211  * sockets.h: fixed bug #34057 socklen_t should be a typedef
1212
1213  2011-08-24: Simon Goldschmidt
1214  * pbuf.c: fixed bug #34112 Odd check in pbuf_alloced_custom (typo)
1215
1216  2011-08-24: Simon Goldschmidt
1217  * dhcp.c: fixed bug #34122 dhcp: hostname can overflow
1218
1219  2011-08-24: Simon Goldschmidt
1220  * netif.c: fixed bug #34121 netif_add/netif_set_ipaddr fail on NULL ipaddr
1221
1222  2011-08-22: Simon Goldschmidt
1223  * tcp_out.c: fixed bug #33962 TF_FIN not always set after FIN is sent. (This
1224    merely prevents nagle from not transmitting fast after closing.)
1225
1226  2011-07-22: Simon Goldschmidt
1227  * api_lib.c, api_msg.c, sockets.c, api.h: fixed bug #31084 (socket API returns
1228    always EMSGSIZE on non-blocking sockets if data size > send buffers) -> now
1229    lwip_send() sends as much as possible for non-blocking sockets
1230
1231  2011-07-22: Simon Goldschmidt
1232  * pbuf.c/.h, timers.c: freeing ooseq pbufs when the pbuf pool is empty implemented
1233    for NO_SYS==1: when not using sys_check_timeouts(), call PBUF_CHECK_FREE_OOSEQ()
1234    at regular intervals from main level.
1235
1236  2011-07-21: Simon Goldschmidt
1237  * etharp.c: fixed bug #33551 (ARP entries may time out although in use) by
1238    sending an ARP request when an ARP entry is used in the last minute before
1239    it would time out.
1240
1241  2011-07-04: Simon Goldschmidt
1242  * sys_arch.txt: Fixed documentation after changing sys arch prototypes for 1.4.0.
1243
1244  2011-06-26: Simon Goldschmidt
1245  * tcp.c: fixed bug #31723 (tcp_kill_prio() kills pcbs with the same prio) by
1246    updating its documentation only.
1247
1248 2011-06-26: Simon Goldschmidt
1249  * mem.c: fixed bug #33545: With MEM_USE_POOLS==1, mem_malloc can return an
1250    unaligned pointer.
1251
1252  2011-06-26: Simon Goldschmidt
1253  * mem.c: fixed bug #33544 "warning in mem.c in lwip 1.4.0 with NO_SYS=1"
1254
1255   2011-05-25: Simon Goldschmidt
1256  * tcp.c: fixed bug #33398 (pointless conversion when checking TCP port range)
1257
1258
1259
1260(STABLE-1.4.0)
1261
1262  ++ New features:
1263
1264  2011-03-27: Simon Goldschmidt
1265  * tcp_impl.h, tcp_in.c, tcp_out.c: Removed 'dataptr' from 'struct tcp_seg' and
1266    calculate it in tcp_zero_window_probe (the only place where it was used).
1267
1268  2010-11-21: Simon Goldschmidt
1269  * dhcp.c/.h: Added a function to deallocate the struct dhcp from a netif
1270    (fixes bug #31525).
1271
1272  2010-07-12: Simon Goldschmidt (patch by Stephane Lesage)
1273  * ip.c, udp.c/.h, pbuf.h, sockets.c: task #10495: Added support for
1274    IP_MULTICAST_LOOP at socket- and raw-API level.
1275
1276  2010-06-16: Simon Goldschmidt
1277  * ip.c: Added an optional define (LWIP_IP_ACCEPT_UDP_PORT) that can allow
1278    link-layer-addressed UDP traffic to be received while a netif is down (just
1279    like DHCP during configuration)
1280
1281  2010-05-22: Simon Goldschmidt
1282  * many many files: bug #27352: removed packing from ip_addr_t, the packed
1283    version is now only used in protocol headers. Added global storage for
1284    current src/dest IP address while in input functions.
1285
1286  2010-05-16: Simon Goldschmidt
1287  * def.h: task #10391: Add preprocessor-macros for compile-time htonl
1288    calculation (and use them throughout the stack where applicable)
1289
1290  2010-05-16: Simon Goldschmidt
1291  * opt.h, memp_std.h, memp.c, ppp_oe.h/.c: PPPoE now uses its own MEMP pool
1292    instead of the heap (moved struct pppoe_softc from ppp_oe.c to ppp_oe.h)
1293
1294  2010-05-16: Simon Goldschmidt
1295  * opt.h, memp_std.h, dns.h/.c: DNS_LOCAL_HOSTLIST_IS_DYNAMIC uses its own
1296    MEMP pool instead of the heap
1297
1298  2010-05-13: Simon Goldschmidt
1299  * tcp.c, udp.c: task #6995: Implement SO_REUSEADDR (correctly), added
1300    new option SO_REUSE_RXTOALL to pass received UDP broadcast/multicast
1301    packets to more than one pcb.
1302
1303  2010-05-02: Simon Goldschmidt
1304  * netbuf.h/.c, sockets.c, api_msg.c: use checksum-on-copy for sending
1305    UDP data for LWIP_NETIF_TX_SINGLE_PBUF==1
1306
1307  2010-04-30: Simon Goldschmidt
1308  * udp.h/.c, pbuf.h/.c: task #6849: added udp_send(_to/_if) functions that
1309    take a precalculated checksum, added pbuf_fill_chksum() to copy data
1310    into a pbuf and at the same time calculating the checksum for that data
1311
1312  2010-04-29: Simon Goldschmidt
1313  * ip_addr.h, etharp.h/.c, autoip.c: Create overridable macros for copying
1314    2-byte-aligned IP addresses and MAC addresses
1315
1316  2010-04-28: Patch by Bill Auerbach
1317  * ip.c: Inline generating IP checksum to save a function call
1318
1319  2010-04-14: Simon Goldschmidt
1320  * tcpip.h/.c, timers.c: Added an overridable define to get informed when the
1321    tcpip_thread processes messages or timeouts to implement a watchdog.
1322
1323  2010-03-28: Simon Goldschmidt
1324  * ip_frag.c: create a new (contiguous) PBUF_RAM for every outgoing
1325    fragment if LWIP_NETIF_TX_SINGLE_PBUF==1
1326
1327  2010-03-27: Simon Goldschmidt
1328  * etharp.c: Speedup TX by moving code from find_entry to etharp_output/
1329    etharp_query to prevent unnecessary function calls (inspired by
1330    patch #7135).
1331
1332  2010-03-20: Simon Goldschmidt
1333  * opt.h, tcpip.c/.h: Added an option to disable tcpip_(un)timeout code
1334    since the linker cannot do this automatically to save space.
1335
1336  2010-03-20: Simon Goldschmidt
1337  * opt.h, etharp.c/.h: Added support for static ARP table entries
1338
1339  2010-03-14: Simon Goldschmidt
1340  * tcp_impl.h, tcp_out.c, inet_chksum.h/.c: task #6849: Calculate checksum
1341    when creating TCP segments, not when (re-)transmitting them.
1342
1343  2010-03-07: Simon Goldschmidt
1344  * sockets.c: bug #28775 (select/event_callback: only check select_cb_list
1345    on change) plus use SYS_LIGHTWEIGHT_PROT to protect the select code.
1346    This should speed up receiving data on sockets as the select code in
1347    event_callback is only executed when select is waiting.
1348
1349  2010-03-06: Simon Goldschmidt
1350  * tcp_out.c: task #7013 (Create option to have all packets delivered to
1351    netif->output in one piece): Always copy to try to create single pbufs
1352    in tcp_write.
1353
1354  2010-03-06: Simon Goldschmidt
1355  * api.h, api_lib.c, sockets.c: task #10167 (sockets: speed up TCP recv
1356    by not allocating a netbuf): added function netconn_recv_tcp_pbuf()
1357    for tcp netconns to receive pbufs, not netbufs; use that function
1358    for tcp sockets.
1359
1360  2010-03-05: Jakob Ole Stoklundsen / Simon Goldschmidt
1361  * opt.h, tcp.h, tcp_impl.h, tcp.c, tcp_in.c, tcp_out.c: task #7040:
1362    Work on tcp_enqueue: Don't waste memory when chaining segments,
1363    added option TCP_OVERSIZE to prevent creating many small pbufs when
1364    calling tcp_write with many small blocks of data. Instead, pbufs are
1365    allocated larger than needed and the space is used for later calls to
1366    tcp_write.
1367
1368  2010-02-21: Simon Goldschmidt
1369  * stats.c/.h: Added const char* name to mem- and memp-stats for easier
1370    debugging.
1371
1372  2010-02-21: Simon Goldschmidt
1373  * tcp.h (and usages), added tcp_impl.h: Splitted API and internal
1374    implementation of tcp to make API usage cleare to application programmers
1375
1376  2010-02-14: Simon Goldschmidt/Stephane Lesage
1377  * ip_addr.h: Improved some defines working on ip addresses, added faster
1378    macro to copy addresses that cannot be NULL
1379
1380  2010-02-13: Simon Goldschmidt
1381  * api.h, api_lib.c, api_msg.c, sockets.c: task #7865 (implement non-
1382    blocking send operation)
1383
1384  2010-02-12: Simon Goldschmidt
1385  * sockets.c/.h: Added a minimal version of posix fctl() to have a
1386    standardised way to set O_NONBLOCK for nonblocking sockets.
1387
1388  2010-02-12: Simon Goldschmidt
1389  * dhcp.c/.h, autoip.c/.h: task #10139 (Prefer statically allocated
1390    memory): added autoip_set_struct() and dhcp_set_struct() to let autoip
1391    and dhcp work with user-allocated structs instead of callin mem_malloc
1392
1393  2010-02-12: Simon Goldschmidt/Jeff Barber
1394  * tcp.c/h: patch #6865 (SO_REUSEADDR for TCP): if pcb.so_options has
1395    SOF_REUSEADDR set, allow binding to endpoint in TIME_WAIT
1396
1397  2010-02-12: Simon Goldschmidt
1398  * sys layer: task #10139 (Prefer statically allocated memory): converted
1399    mbox and semaphore functions to take pointers to sys_mbox_t/sys_sem_t;
1400    converted sys_mbox_new/sys_sem_new to take pointers and return err_t;
1401    task #7212: Add Mutex concept in sys_arch (define LWIP_COMPAT_MUTEX
1402    to let sys.h use binary semaphores instead of mutexes - as before)
1403
1404  2010-02-09: Simon Goldschmidt (Simon Kallweit)
1405  * timers.c/.h: Added function sys_restart_timeouts() from patch #7085
1406    (Restart system timeout handling)
1407
1408  2010-02-09: Simon Goldschmidt
1409  * netif.c/.h, removed loopif.c/.h: task #10153 (Integrate loopif into
1410    netif.c) - loopif does not have to be created by the port any more,
1411    just define LWIP_HAVE_LOOPIF to 1.
1412
1413  2010-02-08: Simon Goldschmidt
1414  * inet.h, ip_addr.c/.h: Added reentrant versions of inet_ntoa/ipaddr_ntoa
1415    inet_ntoa_r/ipaddr_ntoa_r
1416
1417  2010-02-08: Simon Goldschmidt
1418  * netif.h: Added netif_s/get_igmp_mac_filter() macros
1419
1420  2010-02-05: Simon Goldschmidt
1421  * netif.h: Added function-like macros to get/set the hostname on a netif
1422
1423  2010-02-04: Simon Goldschmidt
1424  * nearly every file: Replaced struct ip_addr by typedef ip_addr_t to
1425    make changing the actual implementation behind the typedef easier.
1426
1427  2010-02-01: Simon Goldschmidt
1428  * opt.h, memp_std.h, dns.h, netdb.c, memp.c: Let netdb use a memp pool
1429    for allocating memory when getaddrinfo() is called.
1430
1431  2010-01-31: Simon Goldschmidt
1432  * dhcp.h, dhcp.c: Reworked the code that parses DHCP options: parse
1433    them once instead of parsing for every option. This also removes
1434    the need for mem_malloc from dhcp_recv and makes it possible to
1435    correctly retrieve the BOOTP file.
1436
1437  2010-01-30: simon Goldschmidt
1438  * sockets.c: Use SYS_LIGHTWEIGHT_PROT instead of a semaphore to protect
1439    the sockets array.
1440
1441  2010-01-29: Simon Goldschmidt (patch by Laura Garrett)
1442  * api.h, api_msg.c, sockets.c: Added except set support in select
1443    (patch #6860)
1444
1445  2010-01-29: Simon Goldschmidt (patch by Laura Garrett)
1446  * api.h, sockets.h, err.h, api_lib.c, api_msg.c, sockets.c, err.c:
1447    Add non-blocking support for connect (partly from patch #6860),
1448    plus many cleanups in socket & netconn API.
1449
1450  2010-01-27: Simon Goldschmidt
1451  * opt.h, tcp.h, init.c, api_msg.c: Added TCP_SNDQUEUELOWAT corresponding
1452    to TCP_SNDLOWAT and added tcp_sndqueuelen() - this fixes bug #28605
1453
1454  2010-01-26: Simon Goldschmidt
1455  * snmp: Use memp pools for snmp instead of the heap; added 4 new pools.
1456
1457  2010-01-14: Simon Goldschmidt
1458  * ppp.c/.h: Fixed bug #27856: PPP: Set netif link- and status-callback
1459    by adding ppp_set_netif_statuscallback()/ppp_set_netif_linkcallback()
1460
1461  2010-01-13: Simon Goldschmidt
1462  * mem.c: The heap now may be moved to user-defined memory by defining
1463    LWIP_RAM_HEAP_POINTER as a void pointer to that memory's address
1464    (patch #6966 and bug #26133)
1465
1466  2010-01-10: Simon Goldschmidt (Bill Auerbach)
1467  * opt.h, memp.c: patch #6822 (Add option to place memory pools in
1468    separate arrays)
1469
1470  2010-01-10: Simon Goldschmidt
1471  * init.c, igmp.c: patch #6463 (IGMP - Adding Random Delay): added define
1472    LWIP_RAND() for lwip-wide randomization (to be defined in cc.h)
1473
1474  2009-12-31: Simon Goldschmidt
1475  * tcpip.c, init.c, memp.c, sys.c, memp_std.h, sys.h, tcpip.h
1476    added timers.c/.h: Separated timer implementation from semaphore/mbox
1477    implementation, moved timer implementation to timers.c/.h, timers are
1478    now only called from tcpip_thread or by explicitly checking them.
1479    (TASK#7235)
1480
1481  2009-12-27: Simon Goldschmidt
1482  * opt.h, etharp.h/.c, init.c, tcpip.c: Added an additional option
1483    LWIP_ETHERNET to support ethernet without ARP (necessary for pure PPPoE)
1484
1485
1486  ++ Bugfixes:
1487
1488  2011-04-20: Simon Goldschmidt
1489  * sys_arch.txt: sys_arch_timeouts() is not needed any more.
1490
1491  2011-04-13: Simon Goldschmidt
1492  * tcp.c, udp.c: Fixed bug #33048 (Bad range for IP source port numbers) by
1493    using ports in the IANA private/dynamic range (49152 through 65535).
1494
1495  2011-03-29: Simon Goldschmidt, patch by Emil Lhungdahl:
1496  * etharp.h/.c: Fixed broken VLAN support.
1497
1498  2011-03-27: Simon Goldschmidt
1499  * tcp.c: Fixed bug #32926 (TCP_RMV(&tcp_bound_pcbs) is called on unbound tcp
1500    pcbs) by checking if the pcb was bound (local_port != 0).
1501
1502  2011-03-27: Simon Goldschmidt
1503  * ppp.c: Fixed bug #32280 (ppp: a pbuf is freed twice)
1504
1505  2011-03-27: Simon Goldschmidt
1506  * sockets.c: Fixed bug #32906: lwip_connect+lwip_send did not work for udp and
1507    raw pcbs with LWIP_TCPIP_CORE_LOCKING==1.
1508
1509  2011-03-27: Simon Goldschmidt
1510  * tcp_out.c: Fixed bug #32820 (Outgoing TCP connections created before route
1511    is present never times out) by starting retransmission timer before checking
1512    route.
1513
1514  2011-03-22: Simon Goldschmidt
1515  * ppp.c: Fixed bug #32648 (PPP code crashes when terminating a link) by only
1516    calling sio_read_abort() if the file descriptor is valid.
1517
1518  2011-03-14: Simon Goldschmidt
1519  * err.h/.c, sockets.c, api_msg.c: fixed bug #31748 (Calling non-blocking connect
1520    more than once can render a socket useless) since it mainly involves changing
1521    "FATAL" classification of error codes: ERR_USE and ERR_ISCONN just aren't fatal.
1522
1523  2011-03-13: Simon Goldschmidt
1524  * sockets.c: fixed bug #32769 (ESHUTDOWN is linux-specific) by fixing
1525    err_to_errno_table (ERR_CLSD: ENOTCONN instead of ESHUTDOWN), ERR_ISCONN:
1526    use EALRADY instead of -1
1527
1528  2011-03-13: Simon Goldschmidt
1529  * api_lib.c: netconn_accept: return ERR_ABRT instead of ERR_CLSD if the
1530    connection has been aborted by err_tcp (since this is not a normal closing
1531    procedure).
1532
1533  2011-03-13: Simon Goldschmidt
1534  * tcp.c: tcp_bind: return ERR_VAL instead of ERR_ISCONN when trying to bind
1535    with pcb->state != CLOSED
1536
1537  2011-02-17: Simon Goldschmidt
1538  * rawapi.txt: Fixed bug #32561 tcp_poll argument definition out-of-order in
1539    documentation
1540
1541  2011-02-17: Simon Goldschmidt
1542  * many files: Added missing U/UL modifiers to fix 16-bit-arch portability.
1543
1544  2011-01-24: Simon Goldschmidt
1545  * sockets.c: Fixed bug #31741: lwip_select seems to have threading problems
1546
1547  2010-12-02: Simon Goldschmidt
1548  * err.h: Fixed ERR_IS_FATAL so that ERR_WOULDBLOCK is not fatal.
1549
1550  2010-11-23: Simon Goldschmidt
1551  * api.h, api_lib.c, api_msg.c, sockets.c: netconn.recv_avail is only used for
1552    LWIP_SO_RCVBUF and ioctl/FIONREAD.
1553
1554  2010-11-23: Simon Goldschmidt
1555  * etharp.c: Fixed bug #31720: ARP-queueing: RFC 1122 recommends to queue at
1556    least 1 packet -> ARP_QUEUEING==0 now queues the most recent packet.
1557
1558  2010-11-23: Simon Goldschmidt
1559  * tcp_in.c: Fixed bug #30577: tcp_input: don't discard ACK-only packets after
1560    refusing 'refused_data' again.
1561
1562  2010-11-22: Simon Goldschmidt
1563  * sockets.c: Fixed bug #31590: getsockopt(... SO_ERROR ...) gives EINPROGRESS
1564    after a successful nonblocking connection.
1565
1566  2010-11-22: Simon Goldschmidt
1567  * etharp.c: Fixed bug #31722: IP packets sent with an AutoIP source addr
1568    must be sent link-local
1569
1570  2010-11-22: Simon Goldschmidt
1571  * timers.c: patch #7329: tcp_timer_needed prototype was ifdef'ed out for
1572    LWIP_TIMERS==0
1573
1574  2010-11-20: Simon Goldschmidt
1575  * sockets.c: Fixed bug #31170: lwip_setsockopt() does not set socket number
1576
1577  2010-11-20: Simon Goldschmidt
1578  * sockets.h: Fixed bug #31304: Changed SHUT_RD, SHUT_WR and SHUT_RDWR to
1579    resemble other stacks.
1580
1581  2010-11-20: Simon Goldschmidt
1582  * dns.c: Fixed bug #31535: TCP_SND_QUEUELEN must be at least 2 or else
1583    no-copy TCP writes will never succeed.
1584
1585  2010-11-20: Simon Goldschmidt
1586  * dns.c: Fixed bug #31701: Error return value from dns_gethostbyname() does
1587    not match documentation: return ERR_ARG instead of ERR_VAL if not
1588    initialized or wrong argument.
1589
1590  2010-10-20: Simon Goldschmidt
1591  * sockets.h: Fixed bug #31385: sizeof(struct sockaddr) is 30 but should be 16
1592
1593  2010-10-05: Simon Goldschmidt
1594  * dhcp.c: Once again fixed #30038: DHCP/AutoIP cooperation failed when
1595    replugging the network cable after an AutoIP address was assigned.
1596
1597  2010-08-10: Simon Goldschmidt
1598  * tcp.c: Fixed bug #30728: tcp_new_port() did not check listen pcbs
1599
1600  2010-08-03: Simon Goldschmidt
1601  * udp.c, raw.c: Don't chain empty pbufs when sending them (fixes bug #30625)
1602
1603  2010-08-01: Simon Goldschmidt (patch by Greg Renda)
1604  * ppp.c: Applied patch #7264 (PPP protocols are rejected incorrectly on big
1605    endian architectures)
1606
1607  2010-07-28: Simon Goldschmidt
1608  * api_lib.c, api_msg.c, sockets.c, mib2.c: Fixed compilation with TCP or UDP
1609    disabled.
1610
1611  2010-07-27: Simon Goldschmidt
1612  * tcp.c: Fixed bug #30565 (tcp_connect() check bound list): that check did no
1613    harm but never did anything
1614
1615  2010-07-21: Simon Goldschmidt
1616  * ip.c: Fixed invalid fix for bug #30402 (CHECKSUM_GEN_IP_INLINE does not
1617    add IP options)
1618
1619  2010-07-16: Kieran Mansley
1620  * msg_in.c: Fixed SNMP ASN constant defines to not use ! operator
1621
1622  2010-07-10: Simon Goldschmidt
1623  * ip.c: Fixed bug #30402: CHECKSUM_GEN_IP_INLINE does not add IP options
1624
1625  2010-06-30: Simon Goldschmidt
1626  * api_msg.c: fixed bug #30300 (shutdown parameter was not initialized in
1627    netconn_delete)
1628
1629  2010-06-28: Kieran Mansley
1630  * timers.c remove unportable printing of C function pointers
1631
1632  2010-06-24: Simon Goldschmidt
1633  * init.c, timers.c/.h, opt.h, memp_std.h: From patch #7221: added flag
1634    NO_SYS_NO_TIMERS to drop timer support for NO_SYS==1 for easier upgrading
1635
1636  2010-06-24: Simon Goldschmidt
1637  * api(_lib).c/.h, api_msg.c/.h, sockets.c/.h: Fixed bug #10088: Correctly
1638    implemented shutdown at socket level.
1639
1640  2010-06-21: Simon Goldschmidt
1641  * pbuf.c/.h, ip_frag.c/.h, opt.h, memp_std.h: Fixed bug #29361 (ip_frag has
1642    problems with zero-copy DMA MACs) by adding custom pbufs and implementing
1643    custom pbufs that reference other (original) pbufs. Additionally set
1644    IP_FRAG_USES_STATIC_BUF=0 as default to be on the safe side.
1645
1646  2010-06-15: Simon Goldschmidt
1647  * dhcp.c: Fixed bug #29970: DHCP endian issue parsing option responses
1648
1649  2010-06-14: Simon Goldschmidt
1650  * autoip.c: Fixed bug #30039: AutoIP does not reuse previous addresses
1651
1652  2010-06-12: Simon Goldschmidt
1653  * dhcp.c: Fixed bug #30038: dhcp_network_changed doesn't reset AUTOIP coop
1654    state
1655
1656  2010-05-17: Simon Goldschmidt
1657  * netdb.c: Correctly NULL-terminate h_addr_list
1658
1659  2010-05-16: Simon Goldschmidt
1660  * def.h/.c: changed the semantics of LWIP_PREFIX_BYTEORDER_FUNCS to prevent
1661    "symbol already defined" i.e. when linking to winsock
1662
1663  2010-05-05: Simon Goldschmidt
1664  * def.h, timers.c: Fixed bug #29769 (sys_check_timeouts: sys_now() may
1665    overflow)
1666
1667  2010-04-21: Simon Goldschmidt
1668  * api_msg.c: Fixed bug #29617 (sometime cause stall on delete listening
1669    connection)
1670
1671  2010-03-28: Luca Ceresoli
1672  * ip_addr.c/.h: patch #7143: Add a few missing const qualifiers
1673
1674  2010-03-27: Luca Ceresoli
1675  * mib2.c: patch #7130: remove meaningless const qualifiers
1676
1677  2010-03-26: Simon Goldschmidt
1678  * tcp_out.c: Make LWIP_NETIF_TX_SINGLE_PBUF work for TCP, too
1679
1680  2010-03-26: Simon Goldschmidt
1681  * various files: Fixed compiling with different options disabled (TCP/UDP),
1682    triggered by bug #29345; don't allocate acceptmbox if LWIP_TCP is disabled
1683
1684  2010-03-25: Simon Goldschmidt
1685  * sockets.c: Fixed bug #29332: lwip_select() processes readset incorrectly
1686
1687  2010-03-25: Simon Goldschmidt
1688  * tcp_in.c, test_tcp_oos.c: Fixed bug #29080: Correctly handle remote side
1689    overrunning our rcv_wnd in ooseq case.
1690
1691  2010-03-22: Simon Goldschmidt
1692  * tcp.c: tcp_listen() did not copy the pcb's prio.
1693
1694  2010-03-19: Simon Goldschmidt
1695  * snmp_msg.c: Fixed bug #29256: SNMP Trap address was not correctly set
1696
1697  2010-03-14: Simon Goldschmidt
1698  * opt.h, etharp.h: Fixed bug #29148 (Incorrect PBUF_POOL_BUFSIZE for ports
1699    where ETH_PAD_SIZE > 0) by moving definition of ETH_PAD_SIZE to opt.h
1700    and basing PBUF_LINK_HLEN on it.
1701
1702  2010-03-08: Simon Goldschmidt
1703  * netif.c, ipv4/ip.c: task #10241 (AutoIP: don't break existing connections
1704    when assiging routable address): when checking incoming packets and
1705    aborting existing connection on address change, filter out link-local
1706    addresses.
1707
1708  2010-03-06: Simon Goldschmidt
1709  * sockets.c: Fixed LWIP_NETIF_TX_SINGLE_PBUF for LWIP_TCPIP_CORE_LOCKING
1710
1711  2010-03-06: Simon Goldschmidt
1712  * ipv4/ip.c: Don't try to forward link-local addresses
1713
1714  2010-03-06: Simon Goldschmidt
1715  * etharp.c: Fixed bug #29087: etharp: don't send packets for LinkLocal-
1716    addresses to gw
1717
1718  2010-03-05: Simon Goldschmidt
1719  * dhcp.c: Fixed bug #29072: Correctly set ciaddr based on message-type
1720    and state.
1721
1722  2010-03-05: Simon Goldschmidt
1723  * api_msg.c: Correctly set TCP_WRITE_FLAG_MORE when netconn_write is split
1724    into multiple calls to tcp_write.
1725
1726  2010-02-21: Simon Goldschmidt
1727  * opt.h, mem.h, dns.c: task #10140: Remove DNS_USES_STATIC_BUF (keep
1728    the implementation of DNS_USES_STATIC_BUF==1)
1729
1730  2010-02-20: Simon Goldschmidt
1731  * tcp.h, tcp.c, tcp_in.c, tcp_out.c: Task #10088: Correctly implement
1732    close() vs. shutdown(). Now the application does not get any more
1733    recv callbacks after calling tcp_close(). Added tcp_shutdown().
1734
1735  2010-02-19: Simon Goldschmidt
1736  * mem.c/.h, pbuf.c: Renamed mem_realloc() to mem_trim() to prevent
1737    confusion with realloc()
1738
1739  2010-02-15: Simon Goldschmidt/Stephane Lesage
1740  * netif.c/.h: Link status does not depend on LWIP_NETIF_LINK_CALLBACK
1741    (fixes bug #28899)
1742
1743  2010-02-14: Simon Goldschmidt
1744  * netif.c: Fixed bug #28877 (Duplicate ARP gratuitous packet with
1745    LWIP_NETIF_LINK_CALLBACK set on) by only sending if both link- and
1746    admin-status of a netif are up
1747
1748  2010-02-14: Simon Goldschmidt
1749  * opt.h: Disable ETHARP_TRUST_IP_MAC by default since it slows down packet
1750    reception and is not really necessary
1751
1752  2010-02-14: Simon Goldschmidt
1753  * etharp.c/.h: Fixed ARP input processing: only add a new entry if a
1754    request was directed as us (RFC 826, Packet Reception), otherwise
1755    only update existing entries; internalized some functions
1756
1757  2010-02-14: Simon Goldschmidt
1758  * netif.h, etharp.c, tcpip.c: Fixed bug #28183 (ARP and TCP/IP cannot be
1759    disabled on netif used for PPPoE) by adding a new netif flag
1760    (NETIF_FLAG_ETHERNET) that tells the stack the device is an ethernet
1761    device but prevents usage of ARP (so that ethernet_input can be used
1762    for PPPoE).
1763
1764  2010-02-12: Simon Goldschmidt
1765  * netif.c: netif_set_link_up/down: only do something if the link state
1766    actually changes
1767
1768  2010-02-12: Simon Goldschmidt/Stephane Lesage
1769  * api_msg.c: Fixed bug #28865 (Cannot close socket/netconn in non-blocking
1770    connect)
1771
1772  2010-02-12: Simon Goldschmidt
1773  * mem.h: Fixed bug #28866 (mem_realloc function defined in mem.h)
1774
1775  2010-02-09: Simon Goldschmidt
1776  * api_lib.c, api_msg.c, sockets.c, api.h, api_msg.h: Fixed bug #22110
1777   (recv() makes receive window update for data that wasn't received by
1778    application)
1779
1780  2010-02-09: Simon Goldschmidt/Stephane Lesage
1781  * sockets.c: Fixed bug #28853 (lwip_recvfrom() returns 0 on receive time-out
1782    or any netconn_recv() error)
1783
1784  2010-02-09: Simon Goldschmidt
1785  * ppp.c: task #10154 (PPP: Update snmp in/out counters for tx/rx packets)
1786
1787  2010-02-09: Simon Goldschmidt
1788  * netif.c: For loopback packets, adjust the stats- and snmp-counters
1789    for the loopback netif.
1790
1791  2010-02-08: Simon Goldschmidt
1792  * igmp.c/.h, ip.h: Moved most defines from igmp.h to igmp.c for clarity
1793    since they are not used anywhere else.
1794
1795  2010-02-08: Simon Goldschmidt (Stéphane Lesage)
1796  * igmp.c, igmp.h, stats.c, stats.h: Improved IGMP stats
1797    (patch from bug #28798)
1798
1799  2010-02-08: Simon Goldschmidt (Stéphane Lesage)
1800  * igmp.c: Fixed bug #28798 (Error in "Max Response Time" processing) and
1801    another bug when LWIP_RAND() returns zero.
1802
1803  2010-02-04: Simon Goldschmidt
1804  * nearly every file: Use macros defined in ip_addr.h (some of them new)
1805    to work with IP addresses (preparation for bug #27352 - Change ip_addr
1806    from struct to typedef (u32_t) - and better code).
1807
1808  2010-01-31: Simon Goldschmidt
1809  * netif.c: Don't call the link-callback from netif_set_up/down() since
1810    this invalidly retriggers DHCP.
1811
1812  2010-01-29: Simon Goldschmidt
1813  * ip_addr.h, inet.h, def.h, inet.c, def.c, more: Cleanly separate the
1814    portability file inet.h and its contents from the stack: moved htonX-
1815    functions to def.h (and the new def.c - they are not ipv4 dependent),
1816    let inet.h depend on ip_addr.h and not the other way round.
1817    This fixes bug #28732.
1818
1819  2010-01-28: Kieran Mansley
1820  * tcp.c: Ensure ssthresh >= 2*MSS
1821
1822  2010-01-27: Simon Goldschmidt
1823  * tcp.h, tcp.c, tcp_in.c: Fixed bug #27871: Calling tcp_abort() in recv
1824    callback can lead to accessing unallocated memory. As a consequence,
1825    ERR_ABRT means the application has called tcp_abort()!
1826
1827  2010-01-25: Simon Goldschmidt
1828  * snmp_structs.h, msg_in.c: Partly fixed bug #22070 (MIB_OBJECT_WRITE_ONLY
1829    not implemented in SNMP): write-only or not-accessible are still
1830    returned by getnext (though not by get)
1831
1832  2010-01-24: Simon Goldschmidt
1833  * snmp: Renamed the private mib node from 'private' to 'mib_private' to
1834    not use reserved C/C++ keywords
1835
1836  2010-01-23: Simon Goldschmidt
1837  * sockets.c: Fixed bug #28716: select() returns 0 after waiting for less
1838    than 1 ms
1839
1840  2010-01-21: Simon Goldschmidt
1841  * tcp.c, api_msg.c: Fixed bug #28651 (tcp_connect: no callbacks called
1842    if tcp_enqueue fails) both in raw- and netconn-API
1843
1844  2010-01-19: Simon Goldschmidt
1845  * api_msg.c: Fixed bug #27316: netconn: Possible deadlock in err_tcp
1846
1847  2010-01-18: Iordan Neshev/Simon Goldschmidt
1848  * src/netif/ppp: reorganised PPP sourcecode to 2.3.11 including some
1849    bugfix backports from 2.4.x.
1850
1851  2010-01-18: Simon Goldschmidt
1852  * mem.c: Fixed bug #28679: mem_realloc calculates mem_stats wrong
1853
1854  2010-01-17: Simon Goldschmidt
1855  * api_lib.c, api_msg.c, (api_msg.h, api.h, sockets.c, tcpip.c):
1856    task #10102: "netconn: clean up conn->err threading issues" by adding
1857    error return value to struct api_msg_msg
1858
1859  2010-01-17: Simon Goldschmidt
1860  * api.h, api_lib.c, sockets.c: Changed netconn_recv() and netconn_accept()
1861    to return err_t (bugs #27709 and #28087)
1862
1863  2010-01-14: Simon Goldschmidt
1864  * ...: Use typedef for function prototypes throughout the stack.
1865
1866  2010-01-13: Simon Goldschmidt
1867  * api_msg.h/.c, api_lib.c: Fixed bug #26672 (close connection when receive
1868    window = 0) by correctly draining recvmbox/acceptmbox
1869
1870  2010-01-11: Simon Goldschmidt
1871  * pap.c: Fixed bug #13315 (PPP PAP authentication can result in
1872    erroneous callbacks) by copying the code from recent pppd
1873
1874  2010-01-10: Simon Goldschmidt
1875  * raw.c: Fixed bug #28506 (raw_bind should filter received packets)
1876
1877  2010-01-10: Simon Goldschmidt
1878  * tcp.h/.c: bug #28127 (remove call to tcp_output() from tcp_ack(_now)())
1879
1880  2010-01-08: Simon Goldschmidt
1881  * sockets.c: Fixed bug #28519 (lwip_recvfrom bug with len > 65535)
1882
1883  2010-01-08: Simon Goldschmidt
1884  * dns.c: Copy hostname for DNS_LOCAL_HOSTLIST_IS_DYNAMIC==1 since string
1885    passed to dns_local_addhost() might be volatile
1886
1887  2010-01-07: Simon Goldschmidt
1888  * timers.c, tcp.h: Call tcp_timer_needed() with NO_SYS==1, too
1889
1890  2010-01-06: Simon Goldschmidt
1891  * netdb.h: Fixed bug #28496: missing include guards in netdb.h
1892
1893  2009-12-31: Simon Goldschmidt
1894  * many ppp files: Reorganised PPP source code from ucip structure to pppd
1895    structure to easily compare our code against the pppd code (around v2.3.1)
1896
1897  2009-12-27: Simon Goldschmidt
1898  * tcp_in.c: Another fix for bug #28241 (ooseq processing) and adapted
1899    unit test
1900
1901
1902(STABLE-1.3.2)
1903
1904  ++ New features:
1905
1906  2009-10-27 Simon Goldschmidt/Stephan Lesage
1907  * netifapi.c/.h: Added netifapi_netif_set_addr()
1908
1909  2009-10-07 Simon Goldschmidt/Fabian Koch
1910  * api_msg.c, netbuf.c/.h, opt.h: patch #6888: Patch for UDP Netbufs to
1911    support dest-addr and dest-port (optional: LWIP_NETBUF_RECVINFO)
1912
1913  2009-08-26 Simon Goldschmidt/Simon Kallweit
1914  * slipif.c/.h: bug #26397: SLIP polling support
1915
1916  2009-08-25 Simon Goldschmidt
1917  * opt.h, etharp.h/.c: task #9033: Support IEEE 802.1q tagged frame (VLAN),
1918    New configuration options ETHARP_SUPPORT_VLAN and ETHARP_VLAN_CHECK.
1919
1920  2009-08-25 Simon Goldschmidt
1921  * ip_addr.h, netdb.c: patch #6900: added define ip_ntoa(struct ip_addr*)
1922
1923  2009-08-24 Jakob Stoklund Olesen
1924  * autoip.c, dhcp.c, netif.c: patch #6725: Teach AutoIP and DHCP to respond
1925    to netif_set_link_up().
1926
1927  2009-08-23 Simon Goldschmidt
1928  * tcp.h/.c: Added function tcp_debug_state_str() to convert a tcp state
1929    to a human-readable string.
1930
1931  ++ Bugfixes:
1932
1933  2009-12-24: Kieran Mansley
1934  * tcp_in.c Apply patches from Oleg Tyshev to improve OOS processing
1935    (BUG#28241)
1936
1937  2009-12-06: Simon Goldschmidt
1938  * ppp.h/.c: Fixed bug #27079 (Yet another leak in PPP): outpacket_buf can
1939    be statically allocated (like in ucip)
1940
1941  2009-12-04: Simon Goldschmidt (patch by Ioardan Neshev)
1942  * pap.c: patch #6969: PPP: missing PAP authentication UNTIMEOUT
1943
1944  2009-12-03: Simon Goldschmidt
1945  * tcp.h, tcp_in.c, tcp_out.c: Fixed bug #28106: dup ack for fast retransmit
1946    could have non-zero length
1947
1948  2009-12-02: Simon Goldschmidt
1949  * tcp_in.c: Fixed bug #27904: TCP sends too many ACKs: delay resetting
1950    tcp_input_pcb until after calling the pcb's callbacks
1951
1952  2009-11-29: Simon Goldschmidt
1953  * tcp_in.c: Fixed bug #28054: Two segments with FIN flag on the out-of-
1954    sequence queue, also fixed PBUF_POOL leak in the out-of-sequence code
1955
1956  2009-11-29: Simon Goldschmidt
1957  * pbuf.c: Fixed bug #28064: pbuf_alloc(PBUF_POOL) is not thread-safe by
1958    queueing a call into tcpip_thread to free ooseq-bufs if the pool is empty
1959
1960  2009-11-26: Simon Goldschmidt
1961  * tcp.h: Fixed bug #28098: Nagle can prevent fast retransmit from sending
1962    segment
1963
1964  2009-11-26: Simon Goldschmidt
1965  * tcp.h, sockets.c: Fixed bug #28099: API required to disable Nagle
1966    algorithm at PCB level
1967
1968  2009-11-22: Simon Goldschmidt
1969  * tcp_out.c: Fixed bug #27905: FIN isn't combined with data on unsent
1970
1971  2009-11-22: Simon Goldschmidt (suggested by Bill Auerbach)
1972  * tcp.c: tcp_alloc: prevent increasing stats.err for MEMP_TCP_PCB when
1973    reusing time-wait pcb
1974
1975  2009-11-20: Simon Goldschmidt (patch by Albert Bartel)
1976  * sockets.c: Fixed bug #28062: Data received directly after accepting
1977    does not wake up select
1978
1979  2009-11-11: Simon Goldschmidt
1980  * netdb.h: Fixed bug #27994: incorrect define for freeaddrinfo(addrinfo)
1981
1982  2009-10-30: Simon Goldschmidt
1983  * opt.h: Increased default value for TCP_MSS to 536, updated default
1984    value for TCP_WND to 4*TCP_MSS to keep delayed ACK working.
1985
1986  2009-10-28: Kieran Mansley
1987  * tcp_in.c, tcp_out.c, tcp.h: re-work the fast retransmission code
1988    to follow algorithm from TCP/IP Illustrated
1989
1990  2009-10-27: Kieran Mansley
1991  * tcp_in.c: fix BUG#27445: grow cwnd with every duplicate ACK
1992
1993  2009-10-25: Simon Goldschmidt
1994  * tcp.h: bug-fix in the TCP_EVENT_RECV macro (has to call tcp_recved if
1995    pcb->recv is NULL to keep rcv_wnd correct)
1996
1997  2009-10-25: Simon Goldschmidt
1998  * tcp_in.c: Fixed bug #26251: RST process in TIME_WAIT TCP state
1999
2000  2009-10-23: Simon Goldschmidt (David Empson)
2001  * tcp.c: Fixed bug #27783: Silly window avoidance for small window sizes
2002
2003  2009-10-21: Simon Goldschmidt
2004  * tcp_in.c: Fixed bug #27215: TCP sent() callback gives leading and
2005    trailing 1 byte len (SYN/FIN)
2006
2007  2009-10-21: Simon Goldschmidt
2008  * tcp_out.c: Fixed bug #27315: zero window probe and FIN
2009
2010  2009-10-19: Simon Goldschmidt
2011  * dhcp.c/.h: Minor code simplification (don't store received pbuf, change
2012    conditional code to assert where applicable), check pbuf length before
2013    testing for valid reply
2014
2015  2009-10-19: Simon Goldschmidt
2016  * dhcp.c: Removed most calls to udp_connect since they aren't necessary
2017    when using udp_sendto_if() - always stay connected to IP_ADDR_ANY.
2018
2019  2009-10-16: Simon Goldschmidt
2020  * ip.c: Fixed bug #27390: Source IP check in ip_input() causes it to drop
2021    valid DHCP packets -> allow 0.0.0.0 as source address when LWIP_DHCP is
2022    enabled
2023
2024  2009-10-15: Simon Goldschmidt (Oleg Tyshev)
2025  * tcp_in.c: Fixed bug #27329: dupacks by unidirectional data transmit
2026
2027  2009-10-15: Simon Goldschmidt
2028  * api_lib.c: Fixed bug #27709: conn->err race condition on netconn_recv()
2029    timeout
2030
2031  2009-10-15: Simon Goldschmidt
2032  * autoip.c: Fixed bug #27704: autoip starts with wrong address
2033    LWIP_AUTOIP_CREATE_SEED_ADDR() returned address in host byte order instead
2034    of network byte order
2035
2036  2009-10-11 Simon Goldschmidt (Jörg Kesten)
2037  * tcp_out.c: Fixed bug #27504: tcp_enqueue wrongly concatenates segments
2038    which are not consecutive when retransmitting unacked segments
2039
2040  2009-10-09 Simon Goldschmidt
2041  * opt.h: Fixed default values of some stats to only be enabled if used
2042    Fixes bug #27338: sys_stats is defined when NO_SYS = 1
2043
2044  2009-08-30 Simon Goldschmidt
2045  * ip.c: Fixed bug bug #27345: "ip_frag() does not use the LWIP_NETIF_LOOPBACK
2046    function" by checking for loopback before calling ip_frag
2047
2048  2009-08-25 Simon Goldschmidt
2049  * dhcp.c: fixed invalid dependency to etharp_query if DHCP_DOES_ARP_CHECK==0
2050
2051  2009-08-23 Simon Goldschmidt
2052  * ppp.c: bug #27078: Possible memory leak in pppInit()
2053
2054  2009-08-23 Simon Goldschmidt
2055  * netdb.c, dns.c: bug #26657: DNS, if host name is "localhost", result
2056    is error.
2057
2058  2009-08-23 Simon Goldschmidt
2059  * opt.h, init.c: bug #26649: TCP fails when TCP_MSS > TCP_SND_BUF
2060    Fixed wrong parenthesis, added check in init.c
2061
2062  2009-08-23 Simon Goldschmidt
2063  * ppp.c: bug #27266: wait-state debug message in pppMain occurs every ms
2064
2065  2009-08-23 Simon Goldschmidt
2066  * many ppp files: bug #27267: Added include to string.h where needed
2067
2068  2009-08-23 Simon Goldschmidt
2069  * tcp.h: patch #6843: tcp.h macro optimization patch (for little endian)
2070
2071
2072(STABLE-1.3.1)
2073
2074  ++ New features:
2075
2076  2009-05-10 Simon Goldschmidt
2077  * opt.h, sockets.c, pbuf.c, netbuf.h, pbuf.h: task #7013: Added option
2078    LWIP_NETIF_TX_SINGLE_PBUF to try to create transmit packets from only
2079    one pbuf to help MACs that don't support scatter-gather DMA.
2080
2081  2009-05-09 Simon Goldschmidt
2082  * icmp.h, icmp.c: Shrinked ICMP code, added option to NOT check icoming
2083    ECHO pbuf for size (just use it): LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN
2084
2085  2009-05-05 Simon Goldschmidt, Jakob Stoklund Olesen
2086  * ip.h, ip.c: Added ip_current_netif() & ip_current_header() to receive
2087    extended info about the currently received packet.
2088
2089  2009-04-27 Simon Goldschmidt
2090  * sys.h: Made SYS_LIGHTWEIGHT_PROT and sys_now() work with NO_SYS=1
2091
2092  2009-04-25 Simon Goldschmidt
2093  * mem.c, opt.h: Added option MEM_USE_POOLS_TRY_BIGGER_POOL to try the next
2094    bigger malloc pool if one is empty (only usable with MEM_USE_POOLS).
2095
2096  2009-04-21 Simon Goldschmidt
2097  * dns.c, init.c, dns.h, opt.h: task #7507, patch #6786: DNS supports static
2098    hosts table. New configuration options DNS_LOCAL_HOSTLIST and
2099    DNS_LOCAL_HOSTLIST_IS_DYNAMIC. Also, DNS_LOOKUP_LOCAL_EXTERN() can be defined
2100    as an external function for lookup.
2101
2102  2009-04-15 Simon Goldschmidt
2103  * dhcp.c: patch #6763: Global DHCP XID can be redefined to something more unique
2104
2105  2009-03-31 Kieran Mansley
2106  * tcp.c, tcp_out.c, tcp_in.c, sys.h, tcp.h, opts.h: add support for
2107    TCP timestamp options, off by default.  Rework tcp_enqueue() to
2108    take option flags rather than specified option data
2109
2110  2009-02-18 Simon Goldschmidt
2111  * cc.h: Added printf formatter for size_t: SZT_F
2112
2113  2009-02-16 Simon Goldschmidt (patch by Rishi Khan)
2114  * icmp.c, opt.h: patch #6539: (configurable) response to broadcast- and multicast
2115    pings
2116
2117  2009-02-12 Simon Goldschmidt
2118  * init.h: Added LWIP_VERSION to get the current version of the stack
2119
2120  2009-02-11 Simon Goldschmidt (suggested by Gottfried Spitaler)
2121  * opt.h, memp.h/.c: added MEMP_MEM_MALLOC to use mem_malloc/mem_free instead
2122    of the pool allocator (can save code size with MEM_LIBC_MALLOC if libc-malloc
2123    is otherwise used)
2124
2125  2009-01-28 Jonathan Larmour (suggested by Bill Bauerbach)
2126  * ipv4/inet_chksum.c, ipv4/lwip/inet_chksum.h: inet_chksum_pseudo_partial()
2127  is only used by UDPLITE at present, so conditionalise it.
2128
2129  2008-12-03 Simon Goldschmidt (base on patch from Luca Ceresoli)
2130  * autoip.c: checked in (slightly modified) patch #6683: Customizable AUTOIP
2131    "seed" address. This should reduce AUTOIP conflicts if
2132    LWIP_AUTOIP_CREATE_SEED_ADDR is overridden.
2133
2134  2008-10-02 Jonathan Larmour and Rishi Khan
2135  * sockets.c (lwip_accept): Return EWOULDBLOCK if would block on non-blocking
2136    socket.
2137
2138  2008-06-30 Simon Goldschmidt
2139  * mem.c, opt.h, stats.h: fixed bug #21433: Calling mem_free/pbuf_free from
2140    interrupt context isn't safe: LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT allows
2141    mem_free to run between mem_malloc iterations. Added illegal counter for
2142    mem stats.
2143
2144  2008-06-27 Simon Goldschmidt
2145  * stats.h/.c, some other files: patch #6483: stats module improvement:
2146    Added defines to display each module's statistic individually, added stats
2147    defines for MEM, MEMP and SYS modules, removed (unused) rexmit counter.
2148
2149  2008-06-17 Simon Goldschmidt
2150  * err.h: patch #6459: Made err_t overridable to use a more efficient type
2151    (define LWIP_ERR_T in cc.h)
2152
2153  2008-06-17 Simon Goldschmidt
2154  * slipif.c: patch #6480: Added a configuration option for slipif for symmetry
2155    to loopif
2156
2157  2008-06-17 Simon Goldschmidt (patch by Luca Ceresoli)
2158  * netif.c, loopif.c, ip.c, netif.h, loopif.h, opt.h: Checked in slightly
2159    modified version of patch # 6370: Moved loopif code to netif.c so that
2160    loopback traffic is supported on all netifs (all local IPs).
2161    Added option to limit loopback packets for each netifs.
2162
2163
2164  ++ Bugfixes:
2165  2009-08-12 Kieran Mansley
2166  * tcp_in.c, tcp.c: Fix bug #27209: handle trimming of segments when
2167    out of window or out of order properly
2168
2169  2009-08-12 Kieran Mansley
2170  * tcp_in.c: Fix bug #27199: use snd_wl2 instead of snd_wl1
2171
2172  2009-07-28 Simon Goldschmidt
2173  * mem.h: Fixed bug #27105: "realloc() cannot replace mem_realloc()"s
2174
2175  2009-07-27 Kieran Mansley
2176  * api.h api_msg.h netdb.h sockets.h: add missing #include directives
2177
2178  2009-07-09 Kieran Mansley
2179  * api_msg.c, sockets.c, api.h: BUG23240 use signed counters for
2180    recv_avail and don't increment counters until message successfully
2181    sent to mbox
2182
2183  2009-06-25 Kieran Mansley
2184  * api_msg.c api.h: BUG26722: initialise netconn write variables
2185    in netconn_alloc
2186
2187  2009-06-25 Kieran Mansley
2188  * tcp.h: BUG26879: set ret value in TCP_EVENT macros when function is not set
2189
2190  2009-06-25 Kieran Mansley
2191  * tcp.c, tcp_in.c, tcp_out.c, tcp.h: BUG26301 and BUG26267: correct
2192    simultaneous close behaviour, and make snd_nxt have the same meaning
2193    as in the RFCs.
2194
2195  2009-05-12 Simon Goldschmidt
2196  * etharp.h, etharp.c, netif.c: fixed bug #26507: "Gratuitous ARP depends on
2197    arp_table / uses etharp_query" by adding etharp_gratuitous()
2198
2199  2009-05-12 Simon Goldschmidt
2200  * ip.h, ip.c, igmp.c: bug #26487: Added ip_output_if_opt that can add IP options
2201    to the IP header (used by igmp_ip_output_if)
2202
2203  2009-05-06 Simon Goldschmidt
2204  * inet_chksum.c: On little endian architectures, use LWIP_PLATFORM_HTONS (if
2205    defined) for SWAP_BYTES_IN_WORD to speed up checksumming.
2206
2207  2009-05-05 Simon Goldschmidt
2208  * sockets.c: bug #26405: Prematurely released semaphore causes lwip_select()
2209    to crash
2210
2211  2009-05-04 Simon Goldschmidt
2212  * init.c: snmp was not initialized in lwip_init()
2213
2214  2009-05-04 Frédéric Bernon
2215  * dhcp.c, netbios.c: Changes if IP_SOF_BROADCAST is enabled.
2216
2217  2009-05-03 Simon Goldschmidt
2218  * tcp.h: bug #26349: Nagle algorithm doesn't send although segment is full
2219    (and unsent->next == NULL)
2220
2221  2009-05-02 Simon Goldschmidt
2222  * tcpip.h, tcpip.c: fixed tcpip_untimeout (does not need the time, broken after
2223    1.3.0 in CVS only) - fixes compilation of ppp_oe.c
2224
2225  2009-05-02 Simon Goldschmidt
2226  * msg_in.c: fixed bug #25636: SNMPSET value is ignored for integer fields
2227
2228  2009-05-01 Simon Goldschmidt
2229  * pap.c: bug #21680: PPP upap_rauthnak() drops legal NAK packets
2230
2231  2009-05-01 Simon Goldschmidt
2232  * ppp.c: bug #24228: Memory corruption with PPP and DHCP
2233
2234  2009-04-29 Frédéric Bernon
2235  * raw.c, udp.c, init.c, opt.h, ip.h, sockets.h: bug #26309: Implement the
2236    SO(F)_BROADCAST filter for all API layers. Avoid the unindented reception
2237    of broadcast packets even when this option wasn't set. Port maintainers
2238    which want to enable this filter have to set IP_SOF_BROADCAST=1 in opt.h.
2239    If you want this option also filter broadcast on recv operations, you also
2240    have to set IP_SOF_BROADCAST_RECV=1 in opt.h.
2241
2242  2009-04-28 Simon Goldschmidt, Jakob Stoklund Olesen
2243  * dhcp.c: patch #6721, bugs #25575, #25576: Some small fixes to DHCP and
2244    DHCP/AUTOIP cooperation
2245
2246  2009-04-25 Simon Goldschmidt, Oleg Tyshev
2247  * tcp_out.c: bug #24212: Deadlocked tcp_retransmit due to exceeded pcb->cwnd
2248    Fixed by sorting the unsent and unacked queues (segments are inserted at the
2249    right place in tcp_output and tcp_rexmit).
2250
2251  2009-04-25 Simon Goldschmidt
2252  * memp.c, mem.c, memp.h, mem_std.h: bug #26213 "Problem with memory allocation
2253    when debugging": memp_sizes contained the wrong sizes (including sanity
2254    regions); memp pools for MEM_USE_POOLS were too small
2255
2256  2009-04-24 Simon Goldschmidt, Frédéric Bernon
2257  * inet.c: patch #6765: Fix a small problem with the last changes (incorrect
2258    behavior, with with ip address string not ended by a '\0', a space or a
2259    end of line)
2260
2261  2009-04-19 Simon Goldschmidt
2262  * rawapi.txt: Fixed bug #26069: Corrected documentation: if tcp_connect fails,
2263    pcb->err is called, not pcb->connected (with an error code).
2264
2265  2009-04-19 Simon Goldschmidt
2266  * tcp_out.c: Fixed bug #26236: "TCP options (timestamp) don't work with
2267    no-copy-tcpwrite": deallocate option data, only concat segments with same flags
2268
2269  2009-04-19 Simon Goldschmidt
2270  * tcp_out.c: Fixed bug #25094: "Zero-length pbuf" (options are now allocated
2271    in the header pbuf, not the data pbuf)
2272
2273  2009-04-18 Simon Goldschmidt
2274  * api_msg.c: fixed bug #25695: Segmentation fault in do_writemore()
2275
2276  2009-04-15 Simon Goldschmidt
2277  * sockets.c: tried to fix bug #23559: lwip_recvfrom problem with tcp
2278
2279  2009-04-15 Simon Goldschmidt
2280  * dhcp.c: task #9192: mem_free of dhcp->options_in and dhcp->msg_in
2281
2282  2009-04-15 Simon Goldschmidt
2283  * ip.c, ip6.c, tcp_out.c, ip.h: patch #6808: Add a utility function
2284    ip_hinted_output() (for smaller code mainly)
2285
2286  2009-04-15 Simon Goldschmidt
2287  * inet.c: patch #6765: Supporting new line characters in inet_aton()
2288
2289  2009-04-15 Simon Goldschmidt
2290  * dhcp.c: patch #6764: DHCP rebind and renew did not send hostnam option;
2291    Converted constant OPTION_MAX_MSG_SIZE to netif->mtu, check if netif->mtu
2292    is big enough in dhcp_start
2293
2294  2009-04-15 Simon Goldschmidt
2295  * netbuf.c: bug #26027: netbuf_chain resulted in pbuf memory leak
2296
2297  2009-04-15 Simon Goldschmidt
2298  * sockets.c, ppp.c: bug #25763: corrected 4 occurrences of SMEMCPY to MEMCPY
2299
2300  2009-04-15 Simon Goldschmidt
2301  * sockets.c: bug #26121: set_errno can be overridden
2302
2303  2009-04-09 Kieran Mansley (patch from Luca Ceresoli <lucaceresoli>)
2304  * init.c, opt.h: Patch#6774 TCP_QUEUE_OOSEQ breaks compilation when
2305    LWIP_TCP==0
2306
2307  2009-04-09 Kieran Mansley (patch from Roy Lee <roylee17>)
2308  * tcp.h: Patch#6802 Add do-while-clauses to those function like
2309    macros in tcp.h
2310
2311  2009-03-31 Kieran Mansley
2312  * tcp.c, tcp_in.c, tcp_out.c, tcp.h, opt.h: Rework the way window
2313    updates are calculated and sent (BUG20515)
2314
2315  * tcp_in.c: cope with SYN packets received during established states,
2316    and retransmission of initial SYN.
2317
2318  * tcp_out.c: set push bit correctly when tcp segments are merged
2319
2320  2009-03-27 Kieran Mansley
2321  * tcp_out.c set window correctly on probes (correcting change made
2322    yesterday)
2323
2324  2009-03-26 Kieran Mansley
2325  * tcp.c, tcp_in.c, tcp.h: add tcp_abandon() to cope with dropping
2326    connections where no reset required (bug #25622)
2327
2328  * tcp_out.c: set TCP_ACK flag on keepalive and zero window probes
2329    (bug #20779)
2330
2331  2009-02-18 Simon Goldschmidt (Jonathan Larmour and Bill Auerbach)
2332  * ip_frag.c: patch #6528: the buffer used for IP_FRAG_USES_STATIC_BUF could be
2333    too small depending on MEM_ALIGNMENT
2334
2335  2009-02-16 Simon Goldschmidt
2336  * sockets.h/.c, api_*.h/.c: fixed arguments of socket functions to match the standard;
2337    converted size argument of netconn_write to 'size_t'
2338
2339  2009-02-16 Simon Goldschmidt
2340  * tcp.h, tcp.c: fixed bug #24440: TCP connection close problem on 64-bit host
2341    by moving accept callback function pointer to TCP_PCB_COMMON
2342
2343  2009-02-12 Simon Goldschmidt
2344  * dhcp.c: fixed bug #25345 (DHCPDECLINE is sent with "Maximum message size"
2345    option)
2346
2347  2009-02-11 Simon Goldschmidt
2348  * dhcp.c: fixed bug #24480 (releasing old udp_pdb and pbuf in dhcp_start)
2349
2350  2009-02-11 Simon Goldschmidt
2351  * opt.h, api_msg.c: added configurable default valud for netconn->recv_bufsize:
2352    RECV_BUFSIZE_DEFAULT (fixes bug #23726: pbuf pool exhaustion on slow recv())
2353
2354  2009-02-10 Simon Goldschmidt
2355  * tcp.c: fixed bug #25467: Listen backlog is not reset on timeout in SYN_RCVD:
2356    Accepts_pending is decrease on a corresponding listen pcb when a connection
2357    in state SYN_RCVD is close.
2358
2359  2009-01-28 Jonathan Larmour
2360  * pbuf.c: reclaim pbufs from TCP out-of-sequence segments if we run
2361    out of pool pbufs.
2362
2363  2008-12-19 Simon Goldschmidt
2364  * many files: patch #6699: fixed some warnings on platform where sizeof(int) == 2
2365
2366  2008-12-10 Tamas Somogyi, Frédéric Bernon
2367  * sockets.c: fixed bug #25051: lwip_recvfrom problem with udp: fromaddr and
2368    port uses deleted netbuf.
2369
2370  2008-10-18 Simon Goldschmidt
2371  * tcp_in.c: fixed bug ##24596: Vulnerability on faulty TCP options length
2372    in tcp_parseopt
2373
2374  2008-10-15 Simon Goldschmidt
2375  * ip_frag.c: fixed bug #24517: IP reassembly crashes on unaligned IP headers
2376    by packing the struct ip_reass_helper.
2377
2378  2008-10-03 David Woodhouse, Jonathan Larmour
2379  * etharp.c (etharp_arp_input): Fix type aliasing problem copying ip address.
2380
2381  2008-10-02 Jonathan Larmour
2382  * dns.c: Hard-code structure sizes, to avoid issues on some compilers where
2383    padding is included.
2384
2385  2008-09-30 Jonathan Larmour
2386  * sockets.c (lwip_accept): check addr isn't NULL. If it's valid, do an
2387    assertion check that addrlen isn't NULL.
2388
2389  2008-09-30 Jonathan Larmour
2390  * tcp.c: Fix bug #24227, wrong error message in tcp_bind.
2391
2392  2008-08-26 Simon Goldschmidt
2393  * inet.h, ip_addr.h: fixed bug #24132: Cross-dependency between ip_addr.h and
2394    inet.h -> moved declaration of struct in_addr from ip_addr.h to inet.h
2395
2396  2008-08-14 Simon Goldschmidt
2397  * api_msg.c: fixed bug #23847: do_close_internal references freed memory (when
2398    tcp_close returns != ERR_OK)
2399
2400  2008-07-08 Frédéric Bernon
2401  * stats.h: Fix some build bugs introduced with patch #6483 (missing some parameters
2402    in macros, mainly if MEM_STATS=0 and MEMP_STATS=0).
2403
2404  2008-06-24 Jonathan Larmour
2405  * tcp_in.c: Fix for bug #23693 as suggested by Art R. Ensure cseg is unused
2406    if tcp_seg_copy fails.
2407
2408  2008-06-17 Simon Goldschmidt
2409  * inet_chksum.c: Checked in some ideas of patch #6460 (loop optimizations)
2410    and created defines for swapping bytes and folding u32 to u16.
2411
2412  2008-05-30 Kieran Mansley
2413  * tcp_in.c Remove redundant "if" statement, and use real rcv_wnd
2414    rather than rcv_ann_wnd when deciding if packets are in-window.
2415    Contributed by <arasmussen@consultant.datasys.swri.edu>
2416
2417  2008-05-30 Kieran Mansley
2418  * mem.h: Fix BUG#23254.  Change macro definition of mem_* to allow
2419    passing as function pointers when MEM_LIBC_MALLOC is defined.
2420
2421  2008-05-09 Jonathan Larmour
2422  * err.h, err.c, sockets.c: Fix bug #23119: Reorder timeout error code to
2423    stop it being treated as a fatal error.
2424
2425  2008-04-15 Simon Goldschmidt
2426  * dhcp.c: fixed bug #22804: dhcp_stop doesn't clear NETIF_FLAG_DHCP
2427    (flag now cleared)
2428
2429  2008-03-27 Simon Goldschmidt
2430  * mem.c, tcpip.c, tcpip.h, opt.h: fixed bug #21433 (Calling mem_free/pbuf_free
2431    from interrupt context isn't safe): set LWIP_USE_HEAP_FROM_INTERRUPT to 1
2432    in lwipopts.h or use pbuf_free_callback(p)/mem_free_callback(m) to free pbufs
2433    or heap memory from interrupt context
2434
2435  2008-03-26 Simon Goldschmidt
2436  * tcp_in.c, tcp.c: fixed bug #22249: division by zero could occur if a remote
2437    host sent a zero mss as TCP option.
2438
2439
2440(STABLE-1.3.0)
2441
2442  ++ New features:
2443
2444  2008-03-10 Jonathan Larmour
2445  * inet_chksum.c: Allow choice of one of the sample algorithms to be
2446    made from lwipopts.h. Fix comment on how to override LWIP_CHKSUM.
2447
2448  2008-01-22 Frédéric Bernon
2449  * tcp.c, tcp_in.c, tcp.h, opt.h: Rename LWIP_CALCULATE_EFF_SEND_MSS in
2450    TCP_CALCULATE_EFF_SEND_MSS to have coherent TCP options names.
2451
2452  2008-01-14 Frédéric Bernon
2453  * rawapi.txt, api_msg.c, tcp.c, tcp_in.c, tcp.h: changes for task #7675 "Enable
2454    to refuse data on a TCP_EVENT_RECV call". Important, behavior changes for the
2455    tcp_recv callback (see rawapi.txt).
2456
2457  2008-01-14 Frédéric Bernon, Marc Chaland
2458  * ip.c: Integrate patch #6369" ip_input : checking before realloc".
2459
2460  2008-01-12 Frédéric Bernon
2461  * tcpip.h, tcpip.c, api.h, api_lib.c, api_msg.c, sockets.c: replace the field
2462    netconn::sem per netconn::op_completed like suggested for the task #7490
2463    "Add return value to sys_mbox_post".
2464
2465  2008-01-12 Frédéric Bernon
2466  * api_msg.c, opt.h: replace DEFAULT_RECVMBOX_SIZE per DEFAULT_TCP_RECVMBOX_SIZE,
2467    DEFAULT_UDP_RECVMBOX_SIZE and DEFAULT_RAW_RECVMBOX_SIZE (to optimize queues
2468    sizes), like suggested for the task #7490 "Add return value to sys_mbox_post".
2469
2470  2008-01-10 Frédéric Bernon
2471  * tcpip.h, tcpip.c: add tcpip_callback_with_block function for the task #7490
2472    "Add return value to sys_mbox_post". tcpip_callback is always defined as
2473    "blocking" ("block" parameter = 1).
2474
2475  2008-01-10 Frédéric Bernon
2476  * tcpip.h, tcpip.c, api.h, api_lib.c, api_msg.c, sockets.c: replace the field
2477    netconn::mbox (sys_mbox_t) per netconn::sem (sys_sem_t) for the task #7490
2478    "Add return value to sys_mbox_post".
2479
2480  2008-01-05 Frédéric Bernon
2481  * sys_arch.txt, api.h, api_lib.c, api_msg.h, api_msg.c, tcpip.c, sys.h, opt.h:
2482    Introduce changes for task #7490 "Add return value to sys_mbox_post" with some
2483    modifications in the sys_mbox api: sys_mbox_new take a "size" parameters which
2484    indicate the number of pointers query by the mailbox. There is three defines
2485    in opt.h to indicate sizes for tcpip::mbox, netconn::recvmbox, and for the
2486    netconn::acceptmbox. Port maintainers, you can decide to just add this new
2487    parameter in your implementation, but to ignore it to keep the previous behavior.
2488    The new sys_mbox_trypost function return a value to know if the mailbox is
2489    full or if the message is posted. Take a look to sys_arch.txt for more details.
2490    This new function is used in tcpip_input (so, can be called in an interrupt
2491    context since the function is not blocking), and in recv_udp and recv_raw.
2492
2493  2008-01-04 Frédéric Bernon, Simon Goldschmidt, Jonathan Larmour
2494  * rawapi.txt, api.h, api_lib.c, api_msg.h, api_msg.c, sockets.c, tcp.h, tcp.c,
2495    tcp_in.c, init.c, opt.h: rename backlog options with TCP_ prefix, limit the
2496    "backlog" parameter in an u8_t, 0 is interpreted as "smallest queue", add
2497    documentation in the rawapi.txt file.
2498
2499  2007-12-31 Kieran Mansley (based on patch from Per-Henrik Lundbolm)
2500  * tcp.c, tcp_in.c, tcp_out.c, tcp.h: Add TCP persist timer
2501
2502  2007-12-31 Frédéric Bernon, Luca Ceresoli
2503  * autoip.c, etharp.c: ip_addr.h: Integrate patch #6348: "Broadcast ARP packets
2504    in autoip". The change in etharp_raw could be removed, since all calls to
2505    etharp_raw use ethbroadcast for the "ethdst_addr" parameter. But it could be
2506    wrong in the future.
2507
2508  2007-12-30 Frédéric Bernon, Tom Evans
2509  * ip.c: Fix bug #21846 "LwIP doesn't appear to perform any IP Source Address
2510    Filtering" reported by Tom Evans.
2511
2512  2007-12-21 Frédéric Bernon, Simon Goldschmidt, Jonathan Larmour
2513  * tcp.h, opt.h, api.h, api_msg.h, tcp.c, tcp_in.c, api_lib.c, api_msg.c,
2514    sockets.c, init.c: task #7252: Implement TCP listen backlog: Warning: raw API
2515    applications have to call 'tcp_accepted(pcb)' in their accept callback to
2516    keep accepting new connections.
2517
2518  2007-12-13 Frédéric Bernon
2519  * api_msg.c, err.h, err.c, sockets.c, dns.c, dns.h: replace "enum dns_result"
2520    by err_t type. Add a new err_t code "ERR_INPROGRESS".
2521
2522  2007-12-12 Frédéric Bernon
2523  * dns.h, dns.c, opt.h: move DNS options to the "right" place. Most visibles
2524    are the one which have ram usage.
2525
2526  2007-12-05 Frédéric Bernon
2527  * netdb.c: add a LWIP_DNS_API_HOSTENT_STORAGE option to decide to use a static
2528    set of variables (=0) or a local one (=1). In this last case, your port should
2529    provide a function "struct hostent* sys_thread_hostent( struct hostent* h)"
2530    which have to do a copy of "h" and return a pointer ont the "per-thread" copy.
2531
2532  2007-12-03 Simon Goldschmidt
2533  * ip.c: ip_input: check if a packet is for inp first before checking all other
2534    netifs on netif_list (speeds up packet receiving in most cases)
2535
2536  2007-11-30 Simon Goldschmidt
2537  * udp.c, raw.c: task #7497: Sort lists (pcb, netif, ...) for faster access
2538    UDP: move a (connected) pcb selected for input to the front of the list of
2539    pcbs so that it is found faster next time. Same for RAW pcbs that have eaten
2540    a packet.
2541
2542  2007-11-28 Simon Goldschmidt
2543  * etharp.c, stats.c, stats.h, opt.h: Introduced ETHARP_STATS
2544
2545  2007-11-25 Simon Goldschmidt
2546  * dhcp.c: dhcp_unfold_reply() uses pbuf_copy_partial instead of its own copy
2547    algorithm.
2548
2549  2007-11-24 Simon Goldschmidt
2550  * netdb.h, netdb.c, sockets.h/.c: Moved lwip_gethostbyname from sockets.c
2551    to the new file netdb.c; included lwip_getaddrinfo.
2552
2553  2007-11-21 Simon Goldschmidt
2554  * tcp.h, opt.h, tcp.c, tcp_in.c: implemented calculating the effective send-mss
2555    based on the MTU of the netif used to send. Enabled by default. Disable by
2556    setting LWIP_CALCULATE_EFF_SEND_MSS to 0. This fixes bug #21492.
2557
2558  2007-11-19 Frédéric Bernon
2559  * api_msg.c, dns.h, dns.c: Implement DNS_DOES_NAME_CHECK option (check if name
2560    received match the name query), implement DNS_USES_STATIC_BUF (the place where
2561    copy dns payload to parse the response), return an error if there is no place
2562    for a new query, and fix some minor problems.
2563
2564  2007-11-16 Simon Goldschmidt
2565  * new files: ipv4/inet.c, ipv4/inet_chksum.c, ipv6/inet6.c
2566    removed files: core/inet.c, core/inet6.c
2567    Moved inet files into ipv4/ipv6 directory; splitted inet.c/inet.h into
2568    inet and chksum part; changed includes in all lwIP files as appropriate
2569
2570  2007-11-16 Simon Goldschmidt
2571  * api.h, api_msg.h, api_lib.c, api_msg.c, socket.h, socket.c: Added sequential
2572    dns resolver function for netconn api (netconn_gethostbyname) and socket api
2573    (gethostbyname/gethostbyname_r).
2574
2575  2007-11-15 Jim Pettinato, Frédéric Bernon
2576  * opt.h, init.c, tcpip.c, dhcp.c, dns.h, dns.c: add DNS client for simple name
2577    requests with RAW api interface. Initialization is done in lwip_init() with
2578    build time options. DNS timer is added in tcpip_thread context. DHCP can set
2579    DNS server ip addresses when options are received. You need to set LWIP_DNS=1
2580    in your lwipopts.h file (LWIP_DNS=0 in opt.h). DNS_DEBUG can be set to get
2581    some traces with LWIP_DEBUGF. Sanity check have been added. There is a "todo"
2582    list with points to improve.
2583
2584  2007-11-06 Simon Goldschmidt
2585  * opt.h, mib2.c: Patch #6215: added ifAdminStatus write support (if explicitly
2586    enabled by defining SNMP_SAFE_REQUESTS to 0); added code to check link status
2587    for ifOperStatus if LWIP_NETIF_LINK_CALLBACK is defined.
2588
2589  2007-11-06 Simon Goldschmidt
2590  * api.h, api_msg.h and dependent files: Task #7410: Removed the need to include
2591    core header files in api.h (ip/tcp/udp/raw.h) to hide the internal
2592    implementation from netconn api applications.
2593
2594  2007-11-03 Frédéric Bernon
2595  * api.h, api_lib.c, api_msg.c, sockets.c, opt.h: add SO_RCVBUF option for UDP &
2596    RAW netconn. You need to set LWIP_SO_RCVBUF=1 in your lwipopts.h (it's disabled
2597    by default). Netconn API users can use the netconn_recv_bufsize macro to access
2598    it. This is a first release which have to be improve for TCP. Note it used the
2599    netconn::recv_avail which need to be more "thread-safe" (note there is already
2600    the problem for FIONREAD with lwip_ioctl/ioctlsocket).
2601
2602  2007-11-01 Frédéric Bernon, Marc Chaland
2603  * sockets.h, sockets.c, api.h, api_lib.c, api_msg.h, api_msg.c, tcp.h, tcp_out.c:
2604    Integrate "patch #6250 : MSG_MORE flag for send". MSG_MORE is used at socket api
2605    layer, NETCONN_MORE at netconn api layer, and TCP_WRITE_FLAG_MORE at raw api
2606    layer. This option enable to delayed TCP PUSH flag on multiple "write" calls.
2607    Note that previous "copy" parameter for "write" APIs is now called "apiflags".
2608
2609  2007-10-24 Frédéric Bernon
2610  * api.h, api_lib.c, api_msg.c: Add macro API_EVENT in the same spirit than
2611    TCP_EVENT_xxx macros to get a code more readable. It could also help to remove
2612    some code (like we have talk in "patch #5919 : Create compile switch to remove
2613    select code"), but it could be done later.
2614
2615  2007-10-08 Simon Goldschmidt
2616  * many files: Changed initialization: many init functions are not needed any
2617    more since we now rely on the compiler initializing global and static
2618    variables to zero!
2619
2620  2007-10-06 Simon Goldschmidt
2621  * ip_frag.c, memp.c, mib2.c, ip_frag.h, memp_std.h, opt.h: Changed IP_REASSEMBLY
2622    to enqueue the received pbufs so that multiple packets can be reassembled
2623    simultaneously and no static reassembly buffer is needed.
2624
2625  2007-10-05 Simon Goldschmidt
2626  * tcpip.c, etharp.h, etharp.c: moved ethernet_input from tcpip.c to etharp.c so
2627    all netifs (or ports) can use it.
2628
2629  2007-10-05 Frédéric Bernon
2630  * netifapi.h, netifapi.c: add function netifapi_netif_set_default. Change the
2631    common function to reduce a little bit the footprint (for all functions using
2632    only the "netif" parameter).
2633
2634  2007-10-03 Frédéric Bernon
2635  * netifapi.h, netifapi.c: add functions netifapi_netif_set_up, netifapi_netif_set_down,
2636    netifapi_autoip_start and netifapi_autoip_stop. Use a common function to reduce
2637    a little bit the footprint (for all functions using only the "netif" parameter).
2638
2639  2007-09-15 Frédéric Bernon
2640  * udp.h, udp.c, sockets.c: Changes for "#20503 IGMP Improvement". Add IP_MULTICAST_IF
2641    option in socket API, and a new field "multicast_ip" in "struct udp_pcb" (for
2642    netconn and raw API users), only if LWIP_IGMP=1. Add getsockopt processing for
2643    IP_MULTICAST_TTL and IP_MULTICAST_IF.
2644
2645  2007-09-10 Frédéric Bernon
2646  * snmp.h, mib2.c: enable to remove SNMP timer (which consumne several cycles
2647    even when it's not necessary). snmp_agent.txt tell to call snmp_inc_sysuptime()
2648    each 10ms (but, it's intrusive if you use sys_timeout feature). Now, you can
2649    decide to call snmp_add_sysuptime(100) each 1000ms (which is bigger "step", but
2650    call to a lower frequency). Or, you can decide to not call snmp_inc_sysuptime()
2651    or snmp_add_sysuptime(), and to define the SNMP_GET_SYSUPTIME(sysuptime) macro.
2652    This one is undefined by default in mib2.c. SNMP_GET_SYSUPTIME is called inside
2653    snmp_get_sysuptime(u32_t *value), and enable to change "sysuptime" value only
2654    when it's queried (any direct call to "sysuptime" is changed by a call to
2655    snmp_get_sysuptime).
2656
2657  2007-09-09 Frédéric Bernon, Bill Florac
2658  * igmp.h, igmp.c, netif.h, netif.c, ip.c: To enable to have interfaces with IGMP,
2659    and others without it, there is a new NETIF_FLAG_IGMP flag to set in netif->flags
2660    if you want IGMP on an interface. igmp_stop() is now called inside netif_remove().
2661    igmp_report_groups() is now called inside netif_set_link_up() (need to have
2662    LWIP_NETIF_LINK_CALLBACK=1) to resend reports once the link is up (avoid to wait
2663    the next query message to receive the matching multicast streams).
2664
2665  2007-09-08 Frédéric Bernon
2666  * sockets.c, ip.h, api.h, tcp.h: declare a "struct ip_pcb" which only contains
2667    IP_PCB. Add in the netconn's "pcb" union a "struct ip_pcb *ip;" (no size change).
2668    Use this new field to access to common pcb fields (ttl, tos, so_options, etc...).
2669    Enable to access to these fields with LWIP_TCP=0.
2670
2671  2007-09-05 Frédéric Bernon
2672  * udp.c, ipv4/icmp.c, ipv4/ip.c, ipv6/icmp.c, ipv6/ip6.c, ipv4/icmp.h,
2673    ipv6/icmp.h, opt.h: Integrate "task #7272 : LWIP_ICMP option". The new option
2674    LWIP_ICMP enable/disable ICMP module inside the IP stack (enable per default).
2675    Be careful, disabling ICMP make your product non-compliant to RFC1122, but
2676    help to reduce footprint, and to reduce "visibility" on the Internet.
2677
2678  2007-09-05 Frédéric Bernon, Bill Florac
2679  * opt.h, sys.h, tcpip.c, slipif.c, ppp.c, sys_arch.txt: Change parameters list
2680    for sys_thread_new (see "task #7252 : Create sys_thread_new_ex()"). Two new
2681    parameters have to be provided: a task name, and a task stack size. For this
2682    one, since it's platform dependant, you could define the best one for you in
2683    your lwipopts.h. For port maintainers, you can just add these new parameters
2684    in your sys_arch.c file, and but it's not mandatory, use them in your OS
2685    specific functions.
2686
2687  2007-09-05 Frédéric Bernon
2688  * inet.c, autoip.c, msg_in.c, msg_out.c, init.c: Move some build time checkings
2689    inside init.c for task #7142 "Sanity check user-configurable values".
2690
2691  2007-09-04 Frédéric Bernon, Bill Florac
2692  * igmp.h, igmp.c, memp_std.h, memp.c, init.c, opt.h: Replace mem_malloc call by
2693    memp_malloc, and use a new MEMP_NUM_IGMP_GROUP option (see opt.h to define the
2694    value). It will avoid potential fragmentation problems, use a counter to know
2695    how many times a group is used on an netif, and free it when all applications
2696    leave it. MEMP_NUM_IGMP_GROUP got 8 as default value (and init.c got a sanity
2697    check if LWIP_IGMP!=0).
2698
2699  2007-09-03 Frédéric Bernon
2700  * igmp.h, igmp.c, sockets.c, api_msg.c: Changes for "#20503 IGMP Improvement".
2701    Initialize igmp_mac_filter to NULL in netif_add (this field should be set in
2702    the netif's "init" function). Use the "imr_interface" field (for socket layer)
2703    and/or the "interface" field (for netconn layer), for join/leave operations.
2704    The igmp_join/leavegroup first parameter change from a netif to an ipaddr.
2705    This field could be a netif's ipaddr, or "any" (same meaning than ip_addr_isany).
2706
2707  2007-08-30 Frédéric Bernon
2708  * Add netbuf.h, netbuf.c, Change api.h, api_lib.c: #7249 "Split netbuf functions
2709    from api/api_lib". Now netbuf API is independant of netconn, and can be used
2710    with other API (application based on raw API, or future "socket2" API). Ports
2711    maintainers just have to add src/api/netbuf.c in their makefile/projects.
2712
2713  2007-08-30 Frédéric Bernon, Jonathan Larmour
2714  * init.c: Add first version of lwip_sanity_check for task #7142 "Sanity check
2715    user-configurable values".
2716
2717  2007-08-29 Frédéric Bernon
2718  * igmp.h, igmp.c, tcpip.c, init.c, netif.c: change igmp_init and add igmp_start.
2719    igmp_start is call inside netif_add. Now, igmp initialization is in the same
2720    spirit than the others modules. Modify some IGMP debug traces.
2721
2722  2007-08-29 Frédéric Bernon
2723  * Add init.h, init.c, Change opt.h, tcpip.c: Task  #7213 "Add a lwip_init function"
2724    Add lwip_init function to regroup all modules initializations, and to provide
2725    a place to add code for task #7142 "Sanity check user-configurable values".
2726    Ports maintainers should remove direct initializations calls from their code,
2727    and add init.c in their makefiles. Note that lwip_init() function is called
2728    inside tcpip_init, but can also be used by raw api users since all calls are
2729    disabled when matching options are disabled. Also note that their is new options
2730    in opt.h, you should configure in your lwipopts.h (they are enabled per default).
2731
2732  2007-08-26 Marc Boucher
2733  * api_msg.c: do_close_internal(): Reset the callbacks and arg (conn) to NULL
2734    since they can under certain circumstances be called with an invalid conn
2735    pointer after the connection has been closed (and conn has been freed).
2736
2737  2007-08-25 Frédéric Bernon (Artem Migaev's Patch)
2738  * netif.h, netif.c: Integrate "patch #6163 : Function to check if link layer is up".
2739    Add a netif_is_link_up() function if LWIP_NETIF_LINK_CALLBACK option is set.
2740
2741  2007-08-22 Frédéric Bernon
2742  * netif.h, netif.c, opt.h: Rename LWIP_NETIF_CALLBACK in LWIP_NETIF_STATUS_CALLBACK
2743    to be coherent with new LWIP_NETIF_LINK_CALLBACK option before next release.
2744
2745  2007-08-22 Frédéric Bernon
2746  * tcpip.h, tcpip.c, ethernetif.c, opt.h: remove options ETHARP_TCPIP_INPUT &
2747    ETHARP_TCPIP_ETHINPUT, now, only "ethinput" code is supported, even if the
2748    name is tcpip_input (we keep the name of 1.2.0 function).
2749
2750  2007-08-17 Jared Grubb
2751  * memp_std.h, memp.h, memp.c, mem.c, stats.c: (Task #7136) Centralize mempool
2752    settings into new memp_std.h and optional user file lwippools.h. This adds
2753    more dynamic mempools, and allows the user to create an arbitrary number of
2754    mempools for mem_malloc.
2755
2756  2007-08-16 Marc Boucher
2757  * api_msg.c: Initialize newconn->state to NETCONN_NONE in accept_function;
2758    otherwise it was left to NETCONN_CLOSE and sent_tcp() could prematurely
2759    close the connection.
2760
2761  2007-08-16 Marc Boucher
2762  * sockets.c: lwip_accept(): check netconn_peer() error return.
2763
2764  2007-08-16 Marc Boucher
2765  * mem.c, mem.h: Added mem_calloc().
2766
2767  2007-08-16 Marc Boucher
2768  * tcpip.c, tcpip.h memp.c, memp.h: Added distinct memp (MEMP_TCPIP_MSG_INPKT)
2769    for input packets to prevent floods from consuming all of MEMP_TCPIP_MSG
2770    and starving other message types.
2771    Renamed MEMP_TCPIP_MSG to MEMP_TCPIP_MSG_API
2772
2773  2007-08-16 Marc Boucher
2774  * pbuf.c, pbuf.h, etharp.c, tcp_in.c, sockets.c: Split pbuf flags in pbuf
2775    type and flgs (later renamed to flags).
2776    Use enum pbuf_flag as pbuf_type.  Renumber PBUF_FLAG_*.
2777    Improved lwip_recvfrom().  TCP push now propagated.
2778
2779  2007-08-16 Marc Boucher
2780  * ethernetif.c, contrib/ports/various: ethbroadcast now a shared global
2781    provided by etharp.
2782
2783  2007-08-16 Marc Boucher
2784  * ppp_oe.c ppp_oe.h, auth.c chap.c fsm.c lcp.c ppp.c ppp.h,
2785    etharp.c ethernetif.c, etharp.h, opt.h tcpip.h, tcpip.c:
2786    Added PPPoE support and various PPP improvements.
2787
2788  2007-07-25 Simon Goldschmidt
2789  * api_lib.c, ip_frag.c, pbuf.c, api.h, pbuf.h: Introduced pbuf_copy_partial,
2790    making netbuf_copy_partial use this function.
2791
2792  2007-07-25 Simon Goldschmidt
2793  * tcp_in.c: Fix bug #20506: Slow start / initial congestion window starts with
2794    2 * mss (instead of 1 * mss previously) to comply with some newer RFCs and
2795    other stacks.
2796
2797  2007-07-13 Jared Grubb (integrated by Frédéric Bernon)
2798  * opt.h, netif.h, netif.c, ethernetif.c: Add new configuration option to add
2799    a link callback in the netif struct, and functions to handle it. Be carefull
2800    for port maintainers to add the NETIF_FLAG_LINK_UP flag (like in ethernetif.c)
2801    if you want to be sure to be compatible with future changes...
2802
2803  2007-06-30 Frédéric Bernon
2804  * sockets.h, sockets.c: Implement MSG_PEEK flag for recv/recvfrom functions.
2805
2806  2007-06-21 Simon Goldschmidt
2807  * etharp.h, etharp.c: Combined etharp_request with etharp_raw for both
2808    LWIP_AUTOIP =0 and =1 to remove redundant code.
2809
2810  2007-06-21 Simon Goldschmidt
2811  * mem.c, memp.c, mem.h, memp.h, opt.h: task #6863: Introduced the option
2812    MEM_USE_POOLS to use 4 pools with different sized elements instead of a
2813    heap. This both prevents memory fragmentation and gives a higher speed
2814    at the cost of more memory consumption. Turned off by default.
2815
2816  2007-06-21 Simon Goldschmidt
2817  * api_lib.c, api_msg.c, api.h, api_msg.h: Converted the length argument of
2818    netconn_write (and therefore also api_msg_msg.msg.w.len) from u16_t into
2819    int to be able to send a bigger buffer than 64K with one time (mainly
2820    used from lwip_send).
2821
2822  2007-06-21 Simon Goldschmidt
2823  * tcp.h, api_msg.c: Moved the nagle algorithm from netconn_write/do_write
2824    into a define (tcp_output_nagle) in tcp.h to provide it to raw api users, too.
2825
2826  2007-06-21 Simon Goldschmidt
2827  * api.h, api_lib.c, api_msg.c: Fixed bug #20021: Moved sendbuf-processing in
2828    netconn_write from api_lib.c to api_msg.c to also prevent multiple context-
2829    changes on low memory or empty send-buffer.
2830
2831  2007-06-18 Simon Goldschmidt
2832  * etharp.c, etharp.h: Changed etharp to use a defined hardware address length
2833    of 6 to avoid loading netif->hwaddr_len every time (since this file is only
2834    used for ethernet and struct eth_addr already had a defined length of 6).
2835
2836  2007-06-17 Simon Goldschmidt
2837  * sockets.c, sockets.h: Implemented socket options SO_NO_CHECK for UDP sockets
2838    to disable UDP checksum generation on transmit.
2839
2840  2007-06-13 Frédéric Bernon, Simon Goldschmidt
2841  * debug.h, api_msg.c: change LWIP_ERROR to use it to check errors like invalid
2842    pointers or parameters, and let the possibility to redefined it in cc.h. Use
2843    this macro to check "conn" parameter in api_msg.c functions.
2844
2845  2007-06-11 Simon Goldschmidt
2846  * sockets.c, sockets.h: Added UDP lite support for sockets
2847
2848  2007-06-10 Simon Goldschmidt
2849  * udp.h, opt.h, api_msg.c, ip.c, udp.c: Included switch LWIP_UDPLITE (enabled
2850    by default) to switch off UDP-Lite support if not needed (reduces udp.c code
2851    size)
2852
2853  2007-06-09 Dominik Spies (integrated by Frédéric Bernon)
2854  * autoip.h, autoip.c, dhcp.h, dhcp.c, netif.h, netif.c, etharp.h, etharp.c, opt.h:
2855    AutoIP implementation available for IPv4, with new options LWIP_AUTOIP and
2856    LWIP_DHCP_AUTOIP_COOP if you want to cooperate with DHCP. Some tips to adapt
2857    (see TODO mark in the source code).
2858
2859  2007-06-09 Simon Goldschmidt
2860  * etharp.h, etharp.c, ethernetif.c: Modified order of parameters for
2861    etharp_output() to match netif->output so etharp_output() can be used
2862    directly as netif->output to save one function call.
2863
2864  2007-06-08 Simon Goldschmidt
2865  * netif.h, ethernetif.c, slipif.c, loopif.c: Added define
2866    NETIF_INIT_SNMP(netif, type, speed) to initialize per-netif snmp variables,
2867    added initialization of those to ethernetif, slipif and loopif.
2868
2869  2007-05-18 Simon Goldschmidt
2870  * opt.h, ip_frag.c, ip_frag.h, ip.c: Added option IP_FRAG_USES_STATIC_BUF
2871    (defaulting to off for now) that can be set to 0 to send fragmented
2872    packets by passing PBUF_REFs down the stack.
2873
2874  2007-05-23 Frédéric Bernon
2875  * api_lib.c: Implement SO_RCVTIMEO for accept and recv on TCP
2876    connections, such present in patch #5959.
2877
2878  2007-05-23 Frédéric Bernon
2879  * api.h, api_lib.c, api_msg.c, sockets.c: group the different NETCONN_UDPxxx
2880    code in only one part...
2881
2882  2007-05-18 Simon Goldschmidt
2883  * opt.h, memp.h, memp.c: Added option MEMP_OVERFLOW_CHECK to check for memp
2884    elements to overflow. This is achieved by adding some bytes before and after
2885    each pool element (increasing their size, of course), filling them with a
2886    prominent value and checking them on freeing the element.
2887    Set it to 2 to also check every element in every pool each time memp_malloc()
2888    or memp_free() is called (slower but more helpful).
2889
2890  2007-05-10 Simon Goldschmidt
2891  * opt.h, memp.h, memp.c, pbuf.c (see task #6831): use a new memp pool for
2892    PBUF_POOL pbufs instead of the old pool implementation in pbuf.c to reduce
2893    code size.
2894
2895  2007-05-11 Frédéric Bernon
2896  * sockets.c, api_lib.c, api_msg.h, api_msg.c, netifapi.h, netifapi.c, tcpip.c:
2897    Include a function pointer instead of a table index in the message to reduce
2898    footprint. Disable some part of lwip_send and lwip_sendto if some options are
2899    not set (LWIP_TCP, LWIP_UDP, LWIP_RAW).
2900
2901  2007-05-10 Simon Goldschmidt
2902  * *.h (except netif/ppp/*.h): Included patch #5448: include '#ifdef __cplusplus
2903    \ extern "C" {' in all header files. Now you can write your application using
2904    the lwIP stack in C++ and simply #include the core files. Note I have left
2905    out the netif/ppp/*h header files for now, since I don't know which files are
2906    included by applications and which are for internal use only.
2907
2908  2007-05-09 Simon Goldschmidt
2909  * opt.h, *.c/*.h: Included patch #5920: Create define to override C-library
2910    memcpy. 2 Defines are created: MEMCPY() for normal memcpy, SMEMCPY() for
2911    situations where some compilers might inline the copy and save a function
2912    call. Also replaced all calls to memcpy() with calls to (S)MEMCPY().
2913
2914  2007-05-08 Simon Goldschmidt
2915  * mem.h: If MEM_LIBC_MALLOC==1, allow the defines (e.g. mem_malloc() -> malloc())
2916    to be overriden in case the C-library malloc implementation is not protected
2917    against concurrent access.
2918
2919  2007-05-04 Simon Goldschmidt (Atte Kojo)
2920  * etharp.c: Introduced fast one-entry-cache to speed up ARP lookup when sending
2921    multiple packets to the same host.
2922
2923  2007-05-04 Frédéric Bernon, Jonathan Larmour
2924  * sockets.c, api.h, api_lib.c, api_msg.h, api_msg.c: Fix bug #19162 "lwip_sento: a possible
2925    to corrupt remote addr/port connection state". Reduce problems "not enought memory" with
2926    netbuf (if we receive lot of datagrams). Improve lwip_sendto (only one exchange between
2927    sockets api and api_msg which run in tcpip_thread context). Add netconn_sento function.
2928    Warning, if you directly access to "fromaddr" & "fromport" field from netbuf struct,
2929    these fields are now renamed "addr" & "port".
2930
2931  2007-04-11 Jonathan Larmour
2932  * sys.h, api_lib.c: Provide new sys_mbox_tryfetch function. Require ports to provide new
2933    sys_arch_mbox_tryfetch function to get a message if one is there, otherwise return
2934    with SYS_MBOX_EMPTY. sys_arch_mbox_tryfetch can be implemented as a function-like macro
2935    by the port in sys_arch.h if desired.
2936
2937  2007-04-06 Frédéric Bernon, Simon Goldschmidt
2938  * opt.h, tcpip.h, tcpip.c, netifapi.h, netifapi.c: New configuration option LWIP_NETIF_API
2939    allow to use thread-safe functions to add/remove netif in list, and to start/stop dhcp
2940    clients, using new functions from netifapi.h. Disable as default (no port change to do).
2941
2942  2007-04-05 Frédéric Bernon
2943  * sockets.c: remplace ENOBUFS errors on alloc_socket by ENFILE to be more BSD compliant.
2944
2945  2007-04-04 Simon Goldschmidt
2946  * arch.h, api_msg.c, dhcp.c, msg_in.c, sockets.c: Introduced #define LWIP_UNUSED_ARG(x)
2947    use this for and architecture-independent form to tell the compiler you intentionally
2948    are not using this variable. Can be overriden in cc.h.
2949
2950  2007-03-28 Frédéric Bernon
2951  * opt.h, netif.h, dhcp.h, dhcp.c: New configuration option LWIP_NETIF_HOSTNAME allow to
2952    define a hostname in netif struct (this is just a pointer, so, you can use a hardcoded
2953    string, point on one of your's ethernetif field, or alloc a string you will free yourself).
2954    It will be used by DHCP to register a client hostname, but can also be use when you call
2955    snmp_set_sysname.
2956
2957  2007-03-28 Frédéric Bernon
2958  * netif.h, netif.c: A new NETIF_FLAG_ETHARP flag is defined in netif.h, to allow to
2959    initialize a network interface's flag with. It tell this interface is an ethernet
2960    device, and we can use ARP with it to do a "gratuitous ARP" (RFC 3220 "IP Mobility
2961    Support for IPv4" section 4.6) when interface is "up" with netif_set_up().
2962
2963  2007-03-26 Frédéric Bernon, Jonathan Larmour
2964  * opt.h, tcpip.c: New configuration option LWIP_ARP allow to disable ARP init at build
2965    time if you only use PPP or SLIP. The default is enable. Note we don't have to call
2966    etharp_init in your port's initilization sequence if you use tcpip.c, because this call
2967    is done in tcpip_init function.
2968
2969  2007-03-22 Frédéric Bernon
2970  * stats.h, stats.c, msg_in.c: Stats counters can be change to u32_t if necessary with the
2971    new option LWIP_STATS_LARGE. If you need this option, define LWIP_STATS_LARGE to 1 in
2972    your lwipopts.h. More, unused counters are not defined in the stats structs, and not
2973    display by stats_display(). Note that some options (SYS_STATS and RAW_STATS) are defined
2974    but never used. Fix msg_in.c with the correct #if test for a stat display.
2975
2976  2007-03-21 Kieran Mansley
2977  * netif.c, netif.h: Apply patch#4197 with some changes (originator: rireland@hmgsl.com).
2978    Provides callback on netif up/down state change.
2979
2980  2007-03-11 Frédéric Bernon, Mace Gael, Steve Reynolds
2981  * sockets.h, sockets.c, api.h, api_lib.c, api_msg.h, api_msg.c, igmp.h, igmp.c,
2982    ip.c, netif.h, tcpip.c, opt.h:
2983    New configuration option LWIP_IGMP to enable IGMP processing. Based on only one
2984    filter per all network interfaces. Declare a new function in netif to enable to
2985    control the MAC filter (to reduce lwIP traffic processing).
2986
2987  2007-03-11 Frédéric Bernon
2988  * tcp.h, tcp.c, sockets.c, tcp_out.c, tcp_in.c, opt.h: Keepalive values can
2989    be configured at run time with LWIP_TCP_KEEPALIVE, but don't change this
2990    unless you know what you're doing (default are RFC1122 compliant). Note
2991    that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set in seconds.
2992
2993  2007-03-08 Frédéric Bernon
2994  * tcp.h: Keepalive values can be configured at compile time, but don't change
2995    this unless you know what you're doing (default are RFC1122 compliant).
2996
2997  2007-03-08 Frédéric Bernon
2998  * sockets.c, api.h, api_lib.c, tcpip.c, sys.h, sys.c, err.c, opt.h:
2999    Implement LWIP_SO_RCVTIMEO configuration option to enable/disable SO_RCVTIMEO
3000    on UDP sockets/netconn.
3001
3002  2007-03-08 Simon Goldschmidt
3003  * snmp_msg.h, msg_in.c: SNMP UDP ports can be configured at compile time.
3004
3005  2007-03-06 Frédéric Bernon
3006  * api.h, api_lib.c, sockets.h, sockets.c, tcpip.c, sys.h, sys.c, err.h:
3007    Implement SO_RCVTIMEO on UDP sockets/netconn.
3008
3009  2007-02-28 Kieran Mansley (based on patch from Simon Goldschmidt)
3010  * api_lib.c, tcpip.c, memp.c, memp.h: make API msg structs allocated
3011    on the stack and remove the API msg type from memp
3012
3013  2007-02-26 Jonathan Larmour (based on patch from Simon Goldschmidt)
3014  * sockets.h, sockets.c: Move socket initialization to new
3015    lwip_socket_init() function.
3016    NOTE: this changes the API with ports. Ports will have to be
3017    updated to call lwip_socket_init() now.
3018
3019  2007-02-26 Jonathan Larmour (based on patch from Simon Goldschmidt)
3020  * api_lib.c: Use memcpy in netbuf_copy_partial.
3021
3022
3023  ++ Bug fixes:
3024
3025  2008-03-17 Frédéric Bernon, Ed Kerekes
3026  * igmp.h, igmp.c: Fix bug #22613 "IGMP iphdr problem" (could have
3027    some problems to fill the IP header on some targets, use now the
3028    ip.h macros to do it).
3029
3030  2008-03-13 Frédéric Bernon
3031  * sockets.c: Fix bug #22435 "lwip_recvfrom with TCP break;". Using
3032    (lwip_)recvfrom with valid "from" and "fromlen" parameters, on a
3033    TCP connection caused a crash. Note that using (lwip_)recvfrom
3034    like this is a bit slow and that using (lwip)getpeername is the
3035    good lwip way to do it (so, using recv is faster on tcp sockets).
3036
3037  2008-03-12 Frédéric Bernon, Jonathan Larmour
3038  * api_msg.c, contrib/apps/ping.c: Fix bug #22530 "api_msg.c's
3039    recv_raw() does not consume data", and the ping sample (with
3040    LWIP_SOCKET=1, the code did the wrong supposition that lwip_recvfrom
3041    returned the IP payload, without the IP header).
3042
3043  2008-03-04 Jonathan Larmour
3044  * mem.c, stats.c, mem.h: apply patch #6414 to avoid compiler errors
3045  and/or warnings on some systems where mem_size_t and size_t differ.
3046  * pbuf.c, ppp.c: Fix warnings on some systems with mem_malloc.
3047
3048  2008-03-04 Kieran Mansley (contributions by others)
3049  * Numerous small compiler error/warning fixes from contributions to
3050    mailing list after 1.3.0 release candidate made.
3051
3052  2008-01-25 Cui hengbin (integrated by Frédéric Bernon)
3053  * dns.c: Fix bug #22108 "DNS problem" caused by unaligned structures.
3054
3055  2008-01-15 Kieran Mansley
3056  * tcp_out.c: BUG20511.  Modify persist timer to start when we are
3057    prevented from sending by a small send window, not just a zero
3058    send window.
3059
3060  2008-01-09 Jonathan Larmour
3061  * opt.h, ip.c: Rename IP_OPTIONS define to IP_OPTIONS_ALLOWED to avoid
3062    conflict with Linux system headers.
3063
3064  2008-01-06 Jonathan Larmour
3065  * dhcp.c: fix bug #19927: "DHCP NACK problem" by clearing any existing set IP
3066    address entirely on receiving a DHCPNAK, and restarting discovery.
3067
3068  2007-12-21 Simon Goldschmidt
3069  * sys.h, api_lib.c, api_msg.c, sockets.c: fix bug #21698: "netconn->recv_avail
3070    is not protected" by using new macros for interlocked access to modify/test
3071    netconn->recv_avail.
3072
3073  2007-12-20 Kieran Mansley (based on patch from Oleg Tyshev)
3074  * tcp_in.c: fix bug# 21535 (nrtx not reset correctly in SYN_SENT state)
3075
3076  2007-12-20 Kieran Mansley (based on patch from Per-Henrik Lundbolm)
3077  * tcp.c, tcp_in.c, tcp_out.c, tcp.h: fix bug #20199 (better handling
3078    of silly window avoidance and prevent lwIP from shrinking the window)
3079
3080  2007-12-04 Simon Goldschmidt
3081  * tcp.c, tcp_in.c: fix bug #21699 (segment leak in ooseq processing when last
3082    data packet was lost): add assert that all segment lists are empty in
3083    tcp_pcb_remove before setting pcb to CLOSED state; don't directly set CLOSED
3084    state from LAST_ACK in tcp_process
3085
3086  2007-12-02 Simon Goldschmidt
3087  * sockets.h: fix bug #21654: exclude definition of struct timeval from #ifndef FD_SET
3088    If including <sys/time.h> for system-struct timeval, LWIP_TIMEVAL_PRIVATE now
3089    has to be set to 0 in lwipopts.h
3090
3091  2007-12-02 Simon Goldschmidt
3092  * api_msg.c, api_lib.c: fix bug #21656 (recvmbox problem in netconn API): always
3093    allocate a recvmbox in netconn_new_with_proto_and_callback. For a tcp-listen
3094    netconn, this recvmbox is later freed and a new mbox is allocated for acceptmbox.
3095    This is a fix for thread-safety and allocates all items needed for a netconn
3096    when the netconn is created.
3097
3098  2007-11-30 Simon Goldschmidt
3099  * udp.c: first attempt to fix bug #21655 (DHCP doesn't work reliably with multiple
3100    netifs): if LWIP_DHCP is enabled, UDP packets to DHCP_CLIENT_PORT are passed
3101    to netif->dhcp->pcb only (if that exists) and not to any other pcb for the same
3102    port (only solution to let UDP pcbs 'bind' to a netif instead of an IP address)
3103
3104  2007-11-27 Simon Goldschmidt
3105  * ip.c: fixed bug #21643 (udp_send/raw_send don't fail if netif is down) by
3106    letting ip_route only use netifs that are up.
3107
3108  2007-11-27 Simon Goldschmidt
3109  * err.h, api_lib.c, api_msg.c, sockets.c: Changed error handling: ERR_MEM, ERR_BUF
3110    and ERR_RTE are seen as non-fatal, all other errors are fatal. netconns and
3111    sockets block most operations once they have seen a fatal error.
3112
3113  2007-11-27 Simon Goldschmidt
3114  * udp.h, udp.c, dhcp.c: Implemented new function udp_sendto_if which takes the
3115    netif to send as an argument (to be able to send on netifs that are down).
3116
3117  2007-11-26 Simon Goldschmidt
3118  * tcp_in.c: Fixed bug #21582: pcb->acked accounting can be wrong when ACKs
3119    arrive out-of-order
3120
3121  2007-11-21 Simon Goldschmidt
3122  * tcp.h, tcp_out.c, api_msg.c: Fixed bug #20287: tcp_output_nagle sends too early
3123    Fixed the nagle algorithm; nagle now also works for all raw API applications
3124    and has to be explicitly disabled with 'tcp_pcb->flags |= TF_NODELAY'
3125
3126  2007-11-12 Frédéric Bernon
3127  * sockets.c, api.h, api_lib.c, api_msg.h, api_msg.c: Fixed bug #20900. Now, most
3128    of the netconn_peer and netconn_addr processing is done inside tcpip_thread
3129    context in do_getaddr.
3130
3131  2007-11-10 Simon Goldschmidt
3132  * etharp.c: Fixed bug: assert fired when MEMP_ARP_QUEUE was empty (which can
3133    happen any time). Now the packet simply isn't enqueued when out of memory.
3134
3135  2007-11-01 Simon Goldschmidt
3136  * tcp.c, tcp_in.c: Fixed bug #21494: The send mss (pcb->mss) is set to 536 (or
3137    TCP_MSS if that is smaller) as long as no MSS option is received from the
3138    remote host.
3139
3140  2007-11-01 Simon Goldschmidt
3141  * tcp.h, tcp.c, tcp_in.c: Fixed bug #21491: The MSS option sent (with SYN)
3142    is now based on TCP_MSS instead of pcb->mss (on passive open now effectively
3143    sending our configured TCP_MSS instead of the one received).
3144
3145  2007-11-01 Simon Goldschmidt
3146  * tcp_in.c: Fixed bug #21181: On active open, the initial congestion window was
3147    calculated based on the configured TCP_MSS, not on the MSS option received
3148    with SYN+ACK.
3149
3150  2007-10-09 Simon Goldschmidt
3151  * udp.c, inet.c, inet.h: Fixed UDPLite: send: Checksum was always generated too
3152    short and also was generated wrong if checksum coverage != tot_len;
3153    receive: checksum was calculated wrong if checksum coverage != tot_len
3154
3155  2007-10-08 Simon Goldschmidt
3156  * mem.c: lfree was not updated in mem_realloc!
3157
3158  2007-10-07 Frédéric Bernon
3159  * sockets.c, api.h, api_lib.c: First step to fix "bug #20900 : Potential
3160    crash error problem with netconn_peer & netconn_addr". VERY IMPORTANT:
3161    this change cause an API breakage for netconn_addr, since a parameter
3162    type change. Any compiler should cause an error without any changes in
3163    yours netconn_peer calls (so, it can't be a "silent change"). It also
3164    reduce a little bit the footprint for socket layer (lwip_getpeername &
3165    lwip_getsockname use now a common lwip_getaddrname function since
3166    netconn_peer & netconn_addr have the same parameters).
3167
3168  2007-09-20 Simon Goldschmidt
3169  * tcp.c: Fixed bug #21080 (tcp_bind without check pcbs in TIME_WAIT state)
3170    by checking  tcp_tw_pcbs also
3171
3172  2007-09-19 Simon Goldschmidt
3173  * icmp.c: Fixed bug #21107 (didn't reset IP TTL in ICMP echo replies)
3174
3175  2007-09-15 Mike Kleshov
3176  * mem.c: Fixed bug #21077 (inaccuracy in calculation of lwip_stat.mem.used)
3177
3178  2007-09-06 Frédéric Bernon
3179  * several-files: replace some #include "arch/cc.h" by "lwip/arch.h", or simply remove
3180    it as long as "lwip/opt.h" is included before (this one include "lwip/debug.h" which
3181    already include "lwip/arch.h"). Like that, default defines are provided by "lwip/arch.h"
3182    if they are not defined in cc.h, in the same spirit than "lwip/opt.h" for lwipopts.h.
3183
3184  2007-08-30 Frédéric Bernon
3185  * igmp.h, igmp.c: Some changes to remove some redundant code, add some traces,
3186    and fix some coding style.
3187
3188  2007-08-28 Frédéric Bernon
3189  * tcpip.c: Fix TCPIP_MSG_INPKT processing: now, tcpip_input can be used for any
3190    kind of packets. These packets are considered like Ethernet packets (payload
3191    pointing to ethhdr) if the netif got the NETIF_FLAG_ETHARP flag. Else, packets
3192    are considered like IP packets (payload pointing to iphdr).
3193
3194  2007-08-27 Frédéric Bernon
3195  * api.h, api_lib.c, api_msg.c: First fix for "bug #20900 : Potential crash error
3196    problem with netconn_peer & netconn_addr". Introduce NETCONN_LISTEN netconn_state
3197    and remove obsolete ones (NETCONN_RECV & NETCONN_ACCEPT).
3198
3199  2007-08-24 Kieran Mansley
3200  * inet.c Modify (acc >> 16) test to ((acc >> 16) != 0) to help buggy
3201    compiler (Paradigm C++)
3202
3203  2007-08-09 Frédéric Bernon, Bill Florac
3204  * stats.h, stats.c, igmp.h, igmp.c, opt.h: Fix for bug #20503 : IGMP Improvement.
3205    Introduce IGMP_STATS to centralize statistics management.
3206
3207  2007-08-09 Frédéric Bernon, Bill Florac
3208  * udp.c: Fix for bug #20503 : IGMP Improvement. Enable to receive a multicast
3209    packet on a udp pcb binded on an netif's IP address, and not on "any".
3210
3211  2007-08-09 Frédéric Bernon, Bill Florac
3212  * igmp.h, igmp.c, ip.c: Fix minor changes from bug #20503 : IGMP Improvement.
3213    This is mainly on using lookup/lookfor, and some coding styles...
3214
3215  2007-07-26 Frédéric Bernon (and "thedoctor")
3216  * igmp.c: Fix bug #20595 to accept IGMPv3 "Query" messages.
3217
3218  2007-07-25 Simon Goldschmidt
3219  * api_msg.c, tcp.c: Another fix for bug #20021: by not returning an error if
3220    tcp_output fails in tcp_close, the code in do_close_internal gets simpler
3221    (tcp_output is called again later from tcp timers).
3222
3223  2007-07-25 Simon Goldschmidt
3224  * ip_frag.c: Fixed bug #20429: use the new pbuf_copy_partial instead of the old
3225    copy_from_pbuf, which illegally modified the given pbuf.
3226
3227  2007-07-25 Simon Goldschmidt
3228  * tcp_out.c: tcp_enqueue: pcb->snd_queuelen didn't work for chaine PBUF_RAMs:
3229    changed snd_queuelen++ to snd_queuelen += pbuf_clen(p).
3230
3231  2007-07-24 Simon Goldschmidt
3232  * api_msg.c, tcp.c: Fix bug #20480: Check the pcb passed to tcp_listen() for the
3233    correct state (must be CLOSED).
3234
3235  2007-07-13 Thomas Taranowski (commited by Jared Grubb)
3236  * memp.c: Fix bug #20478: memp_malloc returned NULL+MEMP_SIZE on failed
3237    allocation. It now returns NULL.
3238
3239  2007-07-13 Frédéric Bernon
3240  * api_msg.c: Fix bug #20318: api_msg "recv" callbacks don't call pbuf_free in
3241    all error cases.
3242
3243  2007-07-13 Frédéric Bernon
3244  * api_msg.c: Fix bug #20315: possible memory leak problem if tcp_listen failed,
3245    because current code doesn't follow rawapi.txt documentation.
3246
3247  2007-07-13 Kieran Mansley
3248  * src/core/tcp_in.c Apply patch#5741 from Oleg Tyshev to fix bug in
3249    out of sequence processing of received packets
3250
3251  2007-07-03 Simon Goldschmidt
3252  * nearly-all-files: Added assertions where PBUF_RAM pbufs are used and an
3253    assumption is made that this pbuf is in one piece (i.e. not chained). These
3254    assumptions clash with the possibility of converting to fully pool-based
3255    pbuf implementations, where PBUF_RAM pbufs might be chained.
3256
3257  2007-07-03 Simon Goldschmidt
3258  * api.h, api_lib.c, api_msg.c: Final fix for bug #20021 and some other problems
3259    when closing tcp netconns: removed conn->sem, less context switches when
3260    closing, both netconn_close and netconn_delete should safely close tcp
3261    connections.
3262
3263  2007-07-02 Simon Goldschmidt
3264  * ipv4/ip.h, ipv6/ip.h, opt.h, netif.h, etharp.h, ipv4/ip.c, netif.c, raw.c,
3265    tcp_out.c, udp.c, etharp.c: Added option LWIP_NETIF_HWADDRHINT (default=off)
3266    to cache ARP table indices with each pcb instead of single-entry cache for
3267    the complete stack.
3268
3269  2007-07-02 Simon Goldschmidt
3270  * tcp.h, tcp.c, tcp_in.c, tcp_out.c: Added some ASSERTS and casts to prevent
3271    warnings when assigning to smaller types.
3272
3273  2007-06-28 Simon Goldschmidt
3274  * tcp_out.c: Added check to prevent tcp_pcb->snd_queuelen from overflowing.
3275
3276  2007-06-28 Simon Goldschmidt
3277  * tcp.h: Fixed bug #20287: Fixed nagle algorithm (sending was done too early if
3278    a segment contained chained pbufs)
3279
3280  2007-06-28 Frédéric Bernon
3281  * autoip.c: replace most of rand() calls by a macro LWIP_AUTOIP_RAND which compute
3282    a "pseudo-random" value based on netif's MAC and some autoip fields. It's always
3283    possible to define this macro in your own lwipopts.h to always use C library's
3284    rand(). Note that autoip_create_rand_addr doesn't use this macro.
3285
3286  2007-06-28 Frédéric Bernon
3287  * netifapi.h, netifapi.c, tcpip.h, tcpip.c: Update code to handle the option
3288    LWIP_TCPIP_CORE_LOCKING, and do some changes to be coherent with last modifications
3289    in api_lib/api_msg (use pointers and not type with table, etc...)
3290
3291  2007-06-26 Simon Goldschmidt
3292  * udp.h: Fixed bug #20259: struct udp_hdr was lacking the packin defines.
3293
3294  2007-06-25 Simon Goldschmidt
3295  * udp.c: Fixed bug #20253: icmp_dest_unreach was called with a wrong p->payload
3296    for udp packets with no matching pcb.
3297
3298  2007-06-25 Simon Goldschmidt
3299  * udp.c: Fixed bug #20220: UDP PCB search in udp_input(): a non-local match
3300    could get udp input packets if the remote side matched.
3301
3302  2007-06-13 Simon Goldschmidt
3303  * netif.c: Fixed bug #20180 (TCP pcbs listening on IP_ADDR_ANY could get
3304    changed in netif_set_ipaddr if previous netif->ip_addr.addr was 0.
3305
3306  2007-06-13 Simon Goldschmidt
3307  * api_msg.c: pcb_new sets conn->err if protocol is not implemented
3308    -> netconn_new_..() does not allocate a new connection for unsupported
3309    protocols.
3310
3311  2007-06-13 Frédéric Bernon, Simon Goldschmidt
3312  * api_lib.c: change return expression in netconn_addr and netconn_peer, because
3313    conn->err was reset to ERR_OK without any reasons (and error was lost)...
3314
3315  2007-06-13 Frédéric Bernon, Matthias Weisser
3316  * opt.h, mem.h, mem.c, memp.c, pbuf.c, ip_frag.c, vj.c: Fix bug #20162. Rename
3317    MEM_ALIGN in LWIP_MEM_ALIGN and MEM_ALIGN_SIZE in LWIP_MEM_ALIGN_SIZE to avoid
3318    some macro names collision with some OS macros.
3319
3320  2007-06-11 Simon Goldschmidt
3321  * udp.c: UDP Lite: corrected the use of chksum_len (based on RFC3828: if it's 0,
3322    create checksum over the complete packet. On RX, if it's < 8 (and not 0),
3323    discard the packet. Also removed the duplicate 'udphdr->chksum = 0' for both
3324    UDP & UDP Lite.
3325
3326  2007-06-11 Srinivas Gollakota & Oleg Tyshev
3327  * tcp_out.c: Fix for bug #20075 : "A problem with keep-alive timer and TCP flags"
3328    where TCP flags wasn't initialized in tcp_keepalive.
3329
3330  2007-06-03 Simon Goldschmidt
3331  * udp.c: udp_input(): Input pbuf was not freed if pcb had no recv function
3332    registered, p->payload was modified without modifying p->len if sending
3333    icmp_dest_unreach() (had no negative effect but was definitively wrong).
3334
3335  2007-06-03 Simon Goldschmidt
3336  * icmp.c: Corrected bug #19937: For responding to an icmp echo request, icmp
3337    re-used the input pbuf even if that didn't have enough space to include the
3338    link headers. Now the space is tested and a new pbuf is allocated for the
3339    echo response packet if the echo request pbuf isn't big enough.
3340
3341  2007-06-01 Simon Goldschmidt
3342  * sockets.c: Checked in patch #5914: Moved sockopt processing into tcpip_thread.
3343
3344  2007-05-23 Frédéric Bernon
3345  * api_lib.c, sockets.c: Fixed bug #5958 for netconn_listen (acceptmbox only
3346    allocated by do_listen if success) and netconn_accept errors handling. In
3347    most of api_lib functions, we replace some errors checkings like "if (conn==NULL)"
3348    by ASSERT, except for netconn_delete.
3349
3350  2007-05-23 Frédéric Bernon
3351  * api_lib.c: Fixed bug #5957 "Safe-thread problem inside netconn_recv" to return
3352    an error code if it's impossible to fetch a pbuf on a TCP connection (and not
3353    directly close the recvmbox).
3354
3355  2007-05-22 Simon Goldschmidt
3356  * tcp.c: Fixed bug #1895 (tcp_bind not correct) by introducing a list of
3357    bound but unconnected (and non-listening) tcp_pcbs.
3358
3359  2007-05-22 Frédéric Bernon
3360  * sys.h, sys.c, api_lib.c, tcpip.c: remove sys_mbox_fetch_timeout() (was only
3361    used for LWIP_SO_RCVTIMEO option) and use sys_arch_mbox_fetch() instead of
3362    sys_mbox_fetch() in api files. Now, users SHOULD NOT use internal lwIP features
3363    like "sys_timeout" in their application threads.
3364
3365  2007-05-22 Frédéric Bernon
3366  * api.h, api_lib.c, api_msg.h, api_msg.c: change the struct api_msg_msg to see
3367    which parameters are used by which do_xxx function, and to avoid "misusing"
3368    parameters (patch #5938).
3369
3370  2007-05-22 Simon Goldschmidt
3371  * api_lib.c, api_msg.c, raw.c, api.h, api_msg.h, raw.h: Included patch #5938:
3372    changed raw_pcb.protocol from u16_t to u8_t since for IPv4 and IPv6, proto
3373    is only 8 bits wide. This affects the api, as there, the protocol was
3374    u16_t, too.
3375
3376  2007-05-18 Simon Goldschmidt
3377  * memp.c: addition to patch #5913: smaller pointer was returned but
3378    memp_memory was the same size -> did not save memory.
3379
3380  2007-05-16 Simon Goldschmidt
3381  * loopif.c, slipif.c: Fix bug #19729: free pbuf if netif->input() returns
3382    != ERR_OK.
3383
3384  2007-05-16 Simon Goldschmidt
3385  * api_msg.c, udp.c: If a udp_pcb has a local_ip set, check if it is the same
3386    as the one of the netif used for sending to prevent sending from old
3387    addresses after a netif address gets changed (partly fixes bug #3168).
3388
3389  2007-05-16 Frédéric Bernon
3390  * tcpip.c, igmp.h, igmp.c: Fixed bug "#19800 : IGMP: igmp_tick() will not work
3391    with NO_SYS=1". Note that igmp_init is always in tcpip_thread (and not in
3392    tcpip_init) because we have to be sure that network interfaces are already
3393    added (mac filter is updated only in igmp_init for the moment).
3394
3395  2007-05-16 Simon Goldschmidt
3396  * mem.c, memp.c: Removed semaphores from memp, changed sys_sem_wait calls
3397    into sys_arch_sem_wait calls to prevent timers from running while waiting
3398    for the heap. This fixes bug #19167.
3399
3400  2007-05-13 Simon Goldschmidt
3401  * tcp.h, sockets.h, sockets.c: Fixed bug from patch #5865 by moving the defines
3402    for socket options (lwip_set/-getsockopt) used with level IPPROTO_TCP from
3403    tcp.h to sockets.h.
3404
3405  2007-05-07 Simon Goldschmidt
3406  * mem.c: Another attempt to fix bug #17922.
3407
3408  2007-05-04 Simon Goldschmidt
3409  * pbuf.c, pbuf.h, etharp.c: Further update to ARP queueing: Changed pbuf_copy()
3410    implementation so that it can be reused (don't allocate the target
3411    pbuf inside pbuf_copy()).
3412
3413  2007-05-04 Simon Goldschmidt
3414  * memp.c: checked in patch #5913: in memp_malloc() we can return memp as mem
3415    to save a little RAM (next pointer of memp is not used while not in pool).
3416
3417  2007-05-03 "maq"
3418  * sockets.c: Fix ioctl FIONREAD when some data remains from last recv.
3419    (patch #3574).
3420
3421  2007-04-23 Simon Goldschmidt
3422  * loopif.c, loopif.h, opt.h, src/netif/FILES: fix bug #2595: "loopif results
3423    in NULL reference for incoming TCP packets". Loopif has to be configured
3424    (using LWIP_LOOPIF_MULTITHREADING) to directly call netif->input()
3425    (multithreading environments, e.g. netif->input() = tcpip_input()) or
3426    putting packets on a list that is fed to the stack by calling loopif_poll()
3427    (single-thread / NO_SYS / polling environment where e.g.
3428    netif->input() = ip_input).
3429
3430  2007-04-17 Jonathan Larmour
3431  * pbuf.c: Use s32_t in pbuf_realloc(), as an s16_t can't reliably hold
3432    the difference between two u16_t's.
3433  * sockets.h: FD_SETSIZE needs to match number of sockets, which is
3434    MEMP_NUM_NETCONN in sockets.c right now.
3435
3436  2007-04-12 Jonathan Larmour
3437  * icmp.c: Reset IP header TTL in ICMP ECHO responses (bug #19580).
3438
3439  2007-04-12 Kieran Mansley
3440  * tcp.c, tcp_in.c, tcp_out.c, tcp.h: Modify way the retransmission
3441    timer is reset to fix bug#19434, with help from Oleg Tyshev.
3442
3443  2007-04-11 Simon Goldschmidt
3444  * etharp.c, pbuf.c, pbuf.h: 3rd fix for bug #11400 (arp-queuing): More pbufs than
3445    previously thought need to be copied (everything but PBUF_ROM!). Cleaned up
3446    pbuf.c: removed functions no needed any more (by etharp).
3447
3448  2007-04-11 Kieran Mansley
3449  * inet.c, ip_addr.h, sockets.h, sys.h, tcp.h: Apply patch #5745: Fix
3450    "Constant is long" warnings with 16bit compilers.  Contributed by
3451    avatar@mmlab.cse.yzu.edu.tw
3452
3453  2007-04-05 Frédéric Bernon, Jonathan Larmour
3454  * api_msg.c: Fix bug #16830: "err_tcp() posts to connection mailbox when no pend on
3455    the mailbox is active". Now, the post is only done during a connect, and do_send,
3456    do_write and do_join_leave_group don't do anything if a previous error was signaled.
3457
3458  2007-04-03 Frédéric Bernon
3459  * ip.c: Don't set the IP_DF ("Don't fragment") flag in the IP header in IP output
3460    packets. See patch #5834.
3461
3462  2007-03-30 Frédéric Bernon
3463  * api_msg.c: add a "pcb_new" helper function to avoid redundant code, and to add
3464    missing  pcb allocations checking (in do_bind, and for each raw_new). Fix style.
3465
3466  2007-03-30 Frédéric Bernon
3467  * most of files: prefix all debug.h define with "LWIP_" to avoid any conflict with
3468    others environment defines (these were too "generic").
3469
3470  2007-03-28 Frédéric Bernon
3471  * api.h, api_lib.c, sockets.c: netbuf_ref doesn't check its internal pbuf_alloc call
3472    result and can cause a crash. lwip_send now check netbuf_ref result.
3473
3474  2007-03-28 Simon Goldschmidt
3475  * sockets.c Remove "#include <errno.h>" from sockets.c to avoid multiple
3476    definition of macros (in errno.h and lwip/arch.h) if LWIP_PROVIDE_ERRNO is
3477    defined. This is the way it should have been already (looking at
3478    doc/sys_arch.txt)
3479
3480  2007-03-28 Kieran Mansley
3481  * opt.h Change default PBUF_POOL_BUFSIZE (again) to accomodate default MSS +
3482    IP and TCP headers *and* physical link headers
3483
3484  2007-03-26 Frédéric Bernon (based on patch from Dmitry Potapov)
3485  * api_lib.c: patch for netconn_write(), fixes a possible race condition which cause
3486    to send some garbage. It is not a definitive solution, but the patch does solve
3487    the problem for most cases.
3488
3489  2007-03-22 Frédéric Bernon
3490  * api_msg.h, api_msg.c: Remove obsolete API_MSG_ACCEPT and do_accept (never used).
3491
3492  2007-03-22 Frédéric Bernon
3493  * api_lib.c: somes resources couldn't be freed if there was errors during
3494    netconn_new_with_proto_and_callback.
3495
3496  2007-03-22 Frédéric Bernon
3497  * ethernetif.c: update netif->input calls to check return value. In older ports,
3498    it's a good idea to upgrade them, even if before, there could be another problem
3499    (access to an uninitialized mailbox).
3500
3501  2007-03-21 Simon Goldschmidt
3502  * sockets.c: fixed bug #5067 (essentialy a signed/unsigned warning fixed
3503    by casting to unsigned).
3504
3505  2007-03-21 Frédéric Bernon
3506  * api_lib.c, api_msg.c, tcpip.c: integrate sys_mbox_fetch(conn->mbox, NULL) calls from
3507    api_lib.c to tcpip.c's tcpip_apimsg(). Now, use a local variable and not a
3508    dynamic one from memp to send tcpip_msg to tcpip_thread in a synchrone call.
3509    Free tcpip_msg from tcpip_apimsg is not done in tcpip_thread. This give a
3510    faster and more reliable communication between api_lib and tcpip.
3511
3512  2007-03-21 Frédéric Bernon
3513  * opt.h: Add LWIP_NETIF_CALLBACK (to avoid compiler warning) and set it to 0.
3514
3515  2007-03-21 Frédéric Bernon
3516  * api_msg.c, igmp.c, igmp.h: Fix C++ style comments
3517
3518  2007-03-21 Kieran Mansley
3519  * opt.h Change default PBUF_POOL_BUFSIZE to accomodate default MSS +
3520    IP and TCP headers
3521
3522  2007-03-21 Kieran Mansley
3523  * Fix all uses of pbuf_header to check the return value.  In some
3524    cases just assert if it fails as I'm not sure how to fix them, but
3525    this is no worse than before when they would carry on regardless
3526    of the failure.
3527
3528  2007-03-21 Kieran Mansley
3529  * sockets.c, igmp.c, igmp.h, memp.h: Fix C++ style comments and
3530    comment out missing header include in icmp.c
3531
3532  2007-03-20 Frédéric Bernon
3533  * memp.h, stats.c: Fix stats_display function where memp_names table wasn't
3534    synchronized with memp.h.
3535
3536  2007-03-20 Frédéric Bernon
3537  * tcpip.c: Initialize tcpip's mbox, and verify if initialized in tcpip_input,
3538    tcpip_ethinput, tcpip_callback, tcpip_apimsg, to fix a init problem with
3539    network interfaces. Also fix a compiler warning.
3540
3541  2007-03-20 Kieran Mansley
3542  * udp.c: Only try and use pbuf_header() to make space for headers if
3543    not a ROM or REF pbuf.
3544
3545  2007-03-19 Frédéric Bernon
3546  * api_msg.h, api_msg.c, tcpip.h, tcpip.c: Add return types to tcpip_apimsg()
3547    and api_msg_post().
3548
3549  2007-03-19 Frédéric Bernon
3550  * Remove unimplemented "memp_realloc" function from memp.h.
3551
3552  2007-03-11 Simon Goldschmidt
3553  * pbuf.c: checked in patch #5796: pbuf_alloc: len field claculation caused
3554    memory corruption.
3555
3556  2007-03-11 Simon Goldschmidt (based on patch from Dmitry Potapov)
3557  * api_lib.c, sockets.c, api.h, api_msg.h, sockets.h: Fixed bug #19251
3558    (missing `const' qualifier in socket functions), to get more compatible to
3559    standard POSIX sockets.
3560
3561  2007-03-11 Frédéric Bernon (based on patch from Dmitry Potapov)
3562  * sockets.c: Add asserts inside bind, connect and sendto to check input
3563    parameters. Remove excessive set_errno() calls after get_socket(), because
3564    errno is set inside of get_socket(). Move last sock_set_errno() inside
3565    lwip_close.
3566
3567  2007-03-09 Simon Goldschmidt
3568  * memp.c: Fixed bug #11400: New etharp queueing introduced bug: memp_memory
3569    was allocated too small.
3570
3571  2007-03-06 Simon Goldschmidt
3572  * tcpip.c: Initialize dhcp timers in tcpip_thread (if LWIP_DHCP) to protect
3573    the stack from concurrent access.
3574
3575  2007-03-06 Frédéric Bernon, Dmitry Potapov
3576  * tcpip.c, ip_frag.c, ethernetif.c: Fix some build problems, and a redundancy
3577    call to "lwip_stats.link.recv++;" in low_level_input() & ethernetif_input().
3578
3579  2007-03-06 Simon Goldschmidt
3580  * ip_frag.c, ip_frag.h: Reduce code size: don't include code in those files
3581    if IP_FRAG == 0 and IP_REASSEMBLY == 0
3582
3583  2007-03-06 Frédéric Bernon, Simon Goldschmidt
3584  * opt.h, ip_frag.h, tcpip.h, tcpip.c, ethernetif.c: add new configuration
3585    option named ETHARP_TCPIP_ETHINPUT, which enable the new tcpip_ethinput.
3586    Allow to do ARP processing for incoming packets inside tcpip_thread
3587    (protecting ARP layer against concurrent access). You can also disable
3588    old code using tcp_input with new define ETHARP_TCPIP_INPUT set to 0.
3589    Older ports have to use tcpip_ethinput.
3590
3591  2007-03-06 Simon Goldschmidt (based on patch from Dmitry Potapov)
3592  * err.h, err.c: fixed compiler warning "initialization dircards qualifiers
3593    from pointer target type"
3594
3595  2007-03-05 Frédéric Bernon
3596  * opt.h, sockets.h: add new configuration options (LWIP_POSIX_SOCKETS_IO_NAMES,
3597    ETHARP_TRUST_IP_MAC, review SO_REUSE)
3598
3599  2007-03-04 Frédéric Bernon
3600  * api_msg.c: Remove some compiler warnings : parameter "pcb" was never
3601    referenced.
3602
3603  2007-03-04 Frédéric Bernon
3604  * api_lib.c: Fix "[patch #5764] api_lib.c cleanup: after patch #5687" (from
3605    Dmitry Potapov).
3606    The api_msg struct stay on the stack (not moved to netconn struct).
3607
3608  2007-03-04 Simon Goldschmidt (based on patch from Dmitry Potapov)
3609  * pbuf.c: Fix BUG#19168 - pbuf_free can cause deadlock (if
3610    SYS_LIGHTWEIGHT_PROT=1 & freeing PBUF_RAM when mem_sem is not available)
3611    Also fixed cast warning in pbuf_alloc()
3612
3613  2007-03-04 Simon Goldschmidt
3614  * etharp.c, etharp.h, memp.c, memp.h, opt.h: Fix BUG#11400 - don't corrupt
3615    existing pbuf chain when enqueuing multiple pbufs to a pending ARP request
3616
3617  2007-03-03 Frédéric Bernon
3618  * udp.c: remove obsolete line "static struct udp_pcb *pcb_cache = NULL;"
3619    It is static, and never used in udp.c except udp_init().
3620
3621  2007-03-02 Simon Goldschmidt
3622  * tcpip.c: Moved call to ip_init(), udp_init() and tcp_init() from
3623    tcpip_thread() to tcpip_init(). This way, raw API connections can be
3624    initialized before tcpip_thread is running (e.g. before OS is started)
3625
3626  2007-03-02 Frédéric Bernon
3627  * rawapi.txt: Fix documentation mismatch with etharp.h about etharp_tmr's call
3628    interval.
3629
3630  2007-02-28 Kieran Mansley
3631  * pbuf.c: Fix BUG#17645 - ensure pbuf payload pointer is not moved
3632    outside the region of the pbuf by pbuf_header()
3633
3634  2007-02-28 Kieran Mansley
3635  * sockets.c: Fix BUG#19161 - ensure milliseconds timeout is non-zero
3636    when supplied timeout is also non-zero
3637
3638(STABLE-1.2.0)
3639
3640  2006-12-05 Leon Woestenberg
3641  * CHANGELOG: Mention STABLE-1.2.0 release.
3642
3643  ++ New features:
3644
3645  2006-12-01 Christiaan Simons
3646  * mem.h, opt.h: Added MEM_LIBC_MALLOC option.
3647    Note this is a workaround. Currently I have no other options left.
3648
3649  2006-10-26 Christiaan Simons (accepted patch by Jonathan Larmour)
3650  * ipv4/ip_frag.c: rename MAX_MTU to IP_FRAG_MAX_MTU and move define
3651    to include/lwip/opt.h.
3652  * ipv4/lwip/ip_frag.h: Remove unused IP_REASS_INTERVAL.
3653    Move IP_REASS_MAXAGE and IP_REASS_BUFSIZE to include/lwip/opt.h.
3654  * opt.h: Add above new options.
3655
3656  2006-08-18 Christiaan Simons
3657  * tcp_{in,out}.c: added SNMP counters.
3658  * ipv4/ip.c: added SNMP counters.
3659  * ipv4/ip_frag.c: added SNMP counters.
3660
3661  2006-08-08 Christiaan Simons
3662  * etharp.{c,h}: added etharp_find_addr() to read
3663    (stable) ethernet/IP address pair from ARP table
3664
3665  2006-07-14 Christiaan Simons
3666  * mib_structs.c: added
3667  * include/lwip/snmp_structs.h: added
3668  * netif.{c,h}, netif/ethernetif.c: added SNMP statistics to netif struct
3669
3670  2006-07-06 Christiaan Simons
3671  * snmp/asn1_{enc,dec}.c added
3672  * snmp/mib2.c added
3673  * snmp/msg_{in,out}.c added
3674  * include/lwip/snmp_asn1.h added
3675  * include/lwip/snmp_msg.h added
3676  * doc/snmp_agent.txt added
3677
3678  2006-03-29 Christiaan Simons
3679  * inet.c, inet.h: Added platform byteswap support.
3680    Added LWIP_PLATFORM_BYTESWAP define (defaults to 0) and
3681    optional LWIP_PLATFORM_HTONS(), LWIP_PLATFORM_HTONL() macros.
3682
3683  ++ Bug fixes:
3684
3685  2006-11-30 Christiaan Simons
3686  * dhcp.c: Fixed false triggers of request_timeout.
3687
3688  2006-11-28 Christiaan Simons
3689  * netif.c: In netif_add() fixed missing clear of ip_addr, netmask, gw and flags.
3690
3691  2006-10-11 Christiaan Simons
3692  * api_lib.c etharp.c, ip.c, memp.c, stats.c, sys.{c,h} tcp.h:
3693    Partially accepted patch #5449 for ANSI C compatibility / build fixes.
3694  * ipv4/lwip/ip.h ipv6/lwip/ip.h: Corrected UDP-Lite protocol
3695    identifier from 170 to 136 (bug #17574).
3696
3697  2006-10-10 Christiaan Simons
3698  * api_msg.c: Fixed Nagle algorithm as reported by Bob Grice.
3699
3700  2006-08-17 Christiaan Simons
3701  * udp.c: Fixed bug #17200, added check for broadcast
3702    destinations for PCBs bound to a unicast address.
3703
3704  2006-08-07 Christiaan Simons
3705  * api_msg.c: Flushing TCP output in do_close() (bug #15926).
3706
3707  2006-06-27 Christiaan Simons
3708  * api_msg.c: Applied patch for cold case (bug #11135).
3709    In accept_function() ensure newconn->callback is always initialized.
3710
3711  2006-06-15 Christiaan Simons
3712  * mem.h: added MEM_SIZE_F alias to fix an ancient cold case (bug #1748),
3713    facilitate printing of mem_size_t and u16_t statistics.
3714
3715  2006-06-14 Christiaan Simons
3716  * api_msg.c: Applied patch #5146 to handle allocation failures
3717    in accept() by Kevin Lawson.
3718
3719  2006-05-26 Christiaan Simons
3720  * api_lib.c: Removed conn->sem creation and destruction
3721    from netconn_write() and added sys_sem_new to netconn_new_*.
3722
3723(STABLE-1_1_1)
3724
3725  2006-03-03  Christiaan Simons
3726  * ipv4/ip_frag.c: Added bound-checking assertions on ip_reassbitmap
3727    access and added pbuf_alloc() return value checks.
3728
3729  2006-01-01  Leon Woestenberg <leon.woestenberg@gmx.net>
3730  * tcp_{in,out}.c, tcp_out.c: Removed 'even sndbuf' fix in TCP, which is
3731    now handled by the checksum routine properly.
3732
3733  2006-02-27  Leon Woestenberg <leon.woestenberg@gmx.net>
3734   * pbuf.c: Fix alignment; pbuf_init() would not work unless
3735     pbuf_pool_memory[] was properly aligned. (Patch by Curt McDowell.)
3736
3737  2005-12-20  Leon Woestenberg <leon.woestenberg@gmx.net>
3738  * tcp.c: Remove PCBs which stay in LAST_ACK state too long. Patch
3739    submitted by Mitrani Hiroshi.
3740
3741  2005-12-15  Christiaan Simons
3742  * inet.c: Disabled the added summing routine to preserve code space.
3743
3744  2005-12-14  Leon Woestenberg <leon.woestenberg@gmx.net>
3745  * tcp_in.c: Duplicate FIN ACK race condition fix by Kelvin Lawson.
3746    Added Curt McDowell's optimized checksumming routine for future
3747    inclusion. Need to create test case for unaliged, aligned, odd,
3748    even length combination of cases on various endianess machines.
3749
3750  2005-12-09  Christiaan Simons
3751  * inet.c: Rewrote standard checksum routine in proper portable C.
3752
3753  2005-11-25  Christiaan Simons
3754  * udp.c tcp.c: Removed SO_REUSE hack. Should reside in socket code only.
3755  * *.c: introduced cc.h LWIP_DEBUG formatters matching the u16_t, s16_t,
3756    u32_t, s32_t typedefs. This solves most debug word-length assumes.
3757
3758  2005-07-17 Leon Woestenberg <leon.woestenberg@gmx.net>
3759  * inet.c: Fixed unaligned 16-bit access in the standard checksum
3760    routine by Peter Jolasson.
3761  * slipif.c: Fixed implementation assumption of single-pbuf datagrams.
3762
3763  2005-02-04 Leon Woestenberg <leon.woestenberg@gmx.net>
3764  * tcp_out.c: Fixed uninitialized 'queue' referenced in memerr branch.
3765  * tcp_{out|in}.c: Applied patch fixing unaligned access.
3766
3767  2005-01-04 Leon Woestenberg <leon.woestenberg@gmx.net>
3768  * pbuf.c: Fixed missing semicolon after LWIP_DEBUG statement.
3769
3770  2005-01-03 Leon Woestenberg <leon.woestenberg@gmx.net>
3771  * udp.c: UDP pcb->recv() was called even when it was NULL.
3772
3773(STABLE-1_1_0)
3774
3775  2004-12-28 Leon Woestenberg <leon.woestenberg@gmx.net>
3776  * etharp.*: Disabled multiple packets on the ARP queue.
3777    This clashes with TCP queueing.
3778
3779  2004-11-28 Leon Woestenberg <leon.woestenberg@gmx.net>
3780  * etharp.*: Fixed race condition from ARP request to ARP timeout.
3781    Halved the ARP period, doubled the period counts.
3782    ETHARP_MAX_PENDING now should be at least 2. This prevents
3783    the counter from reaching 0 right away (which would allow
3784    too little time for ARP responses to be received).
3785
3786  2004-11-25 Leon Woestenberg <leon.woestenberg@gmx.net>
3787  * dhcp.c: Decline messages were not multicast but unicast.
3788  * etharp.c: ETHARP_CREATE is renamed to ETHARP_TRY_HARD.
3789    Do not try hard to insert arbitrary packet's source address,
3790    etharp_ip_input() now calls etharp_update() without ETHARP_TRY_HARD.
3791    etharp_query() now always DOES call ETHARP_TRY_HARD so that users
3792    querying an address will see it appear in the cache (DHCP could
3793    suffer from this when a server invalidly gave an in-use address.)
3794  * ipv4/ip_addr.h: Renamed ip_addr_maskcmp() to _netcmp() as we are
3795    comparing network addresses (identifiers), not the network masks
3796    themselves.
3797  * ipv4/ip_addr.c: ip_addr_isbroadcast() now checks that the given
3798    IP address actually belongs to the network of the given interface.
3799
3800  2004-11-24 Kieran Mansley <kjm25@cam.ac.uk>
3801  * tcp.c: Increment pcb->snd_buf when ACK is received in SYN_SENT state.
3802
3803(STABLE-1_1_0-RC1)
3804
3805  2004-10-16 Kieran Mansley <kjm25@cam.ac.uk>
3806  * tcp.c: Add code to tcp_recved() to send an ACK (window update) immediately,
3807    even if one is already pending, if the rcv_wnd is above a threshold
3808    (currently TCP_WND/2). This avoids waiting for a timer to expire to send a
3809    delayed ACK in order to open the window if the stack is only receiving data.
3810
3811  2004-09-12 Kieran Mansley <kjm25@cam.ac.uk>
3812  * tcp*.*: Retransmit time-out handling improvement by Sam Jansen.
3813
3814  2004-08-20 Tony Mountifield <tony@softins.co.uk>
3815  * etharp.c: Make sure the first pbuf queued on an ARP entry
3816    is properly ref counted.
3817
3818  2004-07-27 Tony Mountifield <tony@softins.co.uk>
3819  * debug.h: Added (int) cast in LWIP_DEBUGF() to avoid compiler
3820    warnings about comparison.
3821  * pbuf.c: Stopped compiler complaining of empty if statement
3822    when LWIP_DEBUGF() empty.  Closed an unclosed comment.
3823  * tcp.c: Stopped compiler complaining of empty if statement
3824    when LWIP_DEBUGF() empty.
3825  * ip.h Corrected IPH_TOS() macro: returns a byte, so doesn't need htons().
3826  * inet.c: Added a couple of casts to quiet the compiler.
3827    No need to test isascii(c) before isdigit(c) or isxdigit(c).
3828
3829  2004-07-22 Tony Mountifield <tony@softins.co.uk>
3830  * inet.c: Made data types consistent in inet_ntoa().
3831    Added casts for return values of checksum routines, to pacify compiler.
3832  * ip_frag.c, tcp_out.c, sockets.c, pbuf.c
3833    Small corrections to some debugging statements, to pacify compiler.
3834
3835  2004-07-21 Tony Mountifield <tony@softins.co.uk>
3836  * etharp.c: Removed spurious semicolon and added missing end-of-comment.
3837  * ethernetif.c Updated low_level_output() to match prototype for
3838    netif->linkoutput and changed low_level_input() similarly for consistency.
3839  * api_msg.c: Changed recv_raw() from int to u8_t, to match prototype
3840    of raw_recv() in raw.h and so avoid compiler error.
3841  * sockets.c: Added trivial (int) cast to keep compiler happier.
3842  * ip.c, netif.c Changed debug statements to use the tidier ip4_addrN() macros.
3843
3844(STABLE-1_0_0)
3845
3846  ++ Changes:
3847
3848  2004-07-05 Leon Woestenberg <leon.woestenberg@gmx.net>
3849  * sockets.*: Restructured LWIP_PRIVATE_TIMEVAL. Make sure
3850    your cc.h file defines this either 1 or 0. If non-defined,
3851    defaults to 1.
3852  * .c: Added <string.h> and <errno.h> includes where used.
3853  * etharp.c: Made some array indices unsigned.
3854
3855  2004-06-27 Leon Woestenberg <leon.woestenberg@gmx.net>
3856  * netif.*: Added netif_set_up()/down().
3857  * dhcp.c: Changes to restart program flow.
3858
3859  2004-05-07 Leon Woestenberg <leon.woestenberg@gmx.net>
3860  * etharp.c: In find_entry(), instead of a list traversal per candidate, do a
3861    single-pass lookup for different candidates. Should exploit locality.
3862
3863  2004-04-29 Leon Woestenberg <leon.woestenberg@gmx.net>
3864  * tcp*.c: Cleaned up source comment documentation for Doxygen processing.
3865  * opt.h: ETHARP_ALWAYS_INSERT option removed to comply with ARP RFC.
3866  * etharp.c: update_arp_entry() only adds new ARP entries when adviced to by
3867    the caller. This deprecates the ETHARP_ALWAYS_INSERT overrule option.
3868
3869  ++ Bug fixes:
3870
3871  2004-04-27 Leon Woestenberg <leon.woestenberg@gmx.net>
3872  * etharp.c: Applied patch of bug #8708 by Toni Mountifield with a solution
3873    suggested by Timmy Brolin. Fix for 32-bit processors that cannot access
3874    non-aligned 32-bit words, such as soms 32-bit TCP/IP header fields. Fix
3875    is to prefix the 14-bit Ethernet headers with two padding bytes.
3876
3877  2004-04-23 Leon Woestenberg <leon.woestenberg@gmx.net>
3878  * ip_addr.c: Fix in the ip_addr_isbroadcast() check.
3879  * etharp.c: Fixed the case where the packet that initiates the ARP request
3880    is not queued, and gets lost. Fixed the case where the packets destination
3881    address is already known; we now always queue the packet and perform an ARP
3882    request.
3883
3884(STABLE-0_7_0)
3885
3886  ++ Bug fixes:
3887
3888  * Fixed TCP bug for SYN_SENT to ESTABLISHED state transition.
3889  * Fixed TCP bug in dequeueing of FIN from out of order segment queue.
3890  * Fixed two possible NULL references in rare cases.
3891
3892(STABLE-0_6_6)
3893
3894  ++ Bug fixes:
3895
3896  * Fixed DHCP which did not include the IP address in DECLINE messages.
3897
3898  ++ Changes:
3899
3900  * etharp.c has been hauled over a bit.
3901
3902(STABLE-0_6_5)
3903
3904  ++ Bug fixes:
3905
3906  * Fixed TCP bug induced by bad window resizing with unidirectional TCP traffic.
3907  * Packets sent from ARP queue had invalid source hardware address.
3908
3909  ++ Changes:
3910
3911  * Pass-by ARP requests do now update the cache.
3912
3913  ++ New features:
3914
3915  * No longer dependent on ctype.h.
3916  * New socket options.
3917  * Raw IP pcb support.
3918
3919(STABLE-0_6_4)
3920
3921  ++ Bug fixes:
3922
3923  * Some debug formatters and casts fixed.
3924  * Numereous fixes in PPP.
3925
3926  ++ Changes:
3927
3928  * DEBUGF now is LWIP_DEBUGF
3929  * pbuf_dechain() has been re-enabled.
3930  * Mentioned the changed use of CVS branches in README.
3931
3932(STABLE-0_6_3)
3933
3934  ++ Bug fixes:
3935
3936  * Fixed pool pbuf memory leak in pbuf_alloc().
3937    Occured if not enough PBUF_POOL pbufs for a packet pbuf chain.
3938    Reported by Savin Zlobec.
3939
3940  * PBUF_POOL chains had their tot_len field not set for non-first
3941    pbufs. Fixed in pbuf_alloc().
3942
3943  ++ New features:
3944
3945  * Added PPP stack contributed by Marc Boucher
3946
3947  ++ Changes:
3948
3949  * Now drops short packets for ICMP/UDP/TCP protocols. More robust.
3950
3951  * ARP queueuing now queues the latest packet instead of the first.
3952    This is the RFC recommended behaviour, but can be overridden in
3953    lwipopts.h.
3954
3955(0.6.2)
3956
3957  ++ Bugfixes:
3958
3959  * TCP has been fixed to deal with the new use of the pbuf->ref
3960    counter.
3961
3962  * DHCP dhcp_inform() crash bug fixed.
3963
3964  ++ Changes:
3965
3966  * Removed pbuf_pool_free_cache and pbuf_pool_alloc_cache. Also removed
3967    pbuf_refresh(). This has sped up pbuf pool operations considerably.
3968    Implemented by David Haas.
3969
3970(0.6.1)
3971
3972  ++ New features:
3973
3974  * The packet buffer implementation has been enhanced to support
3975    zero-copy and copy-on-demand for packet buffers which have their
3976    payloads in application-managed memory.
3977    Implemented by David Haas.
3978
3979    Use PBUF_REF to make a pbuf refer to RAM. lwIP will use zero-copy
3980    if an outgoing packet can be directly sent on the link, or perform
3981    a copy-on-demand when necessary.
3982
3983    The application can safely assume the packet is sent, and the RAM
3984    is available to the application directly after calling udp_send()
3985    or similar function.
3986
3987  ++ Bugfixes:
3988
3989  * ARP_QUEUEING should now correctly work for all cases, including
3990    PBUF_REF.
3991    Implemented by Leon Woestenberg.
3992
3993  ++ Changes:
3994
3995  * IP_ADDR_ANY is no longer a NULL pointer. Instead, it is a pointer
3996    to a '0.0.0.0' IP address.
3997
3998  * The packet buffer implementation is changed. The pbuf->ref counter
3999    meaning has changed, and several pbuf functions have been
4000    adapted accordingly.
4001
4002  * netif drivers have to be changed to set the hardware address length field
4003    that must be initialized correctly by the driver (hint: 6 for Ethernet MAC).
4004    See the contrib/ports/c16x cs8900 driver as a driver example.
4005
4006  * netif's have a dhcp field that must be initialized to NULL by the driver.
4007    See the contrib/ports/c16x cs8900 driver as a driver example.
4008
4009(0.5.x) This file has been unmaintained up to 0.6.1. All changes are
4010  logged in CVS but have not been explained here.
4011
4012(0.5.3) Changes since version 0.5.2
4013
4014  ++ Bugfixes:
4015
4016  * memp_malloc(MEMP_API_MSG) could fail with multiple application
4017    threads because it wasn't protected by semaphores.
4018
4019  ++ Other changes:
4020
4021  * struct ip_addr now packed.
4022
4023  * The name of the time variable in arp.c has been changed to ctime
4024    to avoid conflicts with the time() function.
4025
4026(0.5.2) Changes since version 0.5.1
4027
4028  ++ New features:
4029
4030  * A new TCP function, tcp_tmr(), now handles both TCP timers.
4031
4032  ++ Bugfixes:
4033
4034  * A bug in tcp_parseopt() could cause the stack to hang because of a
4035    malformed TCP option.
4036
4037  * The address of new connections in the accept() function in the BSD
4038    socket library was not handled correctly.
4039
4040  * pbuf_dechain() did not update the ->tot_len field of the tail.
4041
4042  * Aborted TCP connections were not handled correctly in all
4043    situations.
4044
4045  ++ Other changes:
4046
4047  * All protocol header structs are now packed.
4048
4049  * The ->len field in the tcp_seg structure now counts the actual
4050    amount of data, and does not add one for SYN and FIN segments.
4051
4052(0.5.1) Changes since version 0.5.0
4053
4054  ++ New features:
4055
4056  * Possible to run as a user process under Linux.
4057
4058  * Preliminary support for cross platform packed structs.
4059
4060  * ARP timer now implemented.
4061
4062  ++ Bugfixes:
4063
4064  * TCP output queue length was badly initialized when opening
4065    connections.
4066
4067  * TCP delayed ACKs were not sent correctly.
4068
4069  * Explicit initialization of BSS segment variables.
4070
4071  * read() in BSD socket library could drop data.
4072
4073  * Problems with memory alignment.
4074
4075  * Situations when all TCP buffers were used could lead to
4076    starvation.
4077
4078  * TCP MSS option wasn't parsed correctly.
4079
4080  * Problems with UDP checksum calculation.
4081
4082  * IP multicast address tests had endianess problems.
4083
4084  * ARP requests had wrong destination hardware address.
4085
4086  ++ Other changes:
4087
4088  * struct eth_addr changed from u16_t[3] array to u8_t[6].
4089
4090  * A ->linkoutput() member was added to struct netif.
4091
4092  * TCP and UDP ->dest_* struct members where changed to ->remote_*.
4093
4094  * ntoh* macros are now null definitions for big endian CPUs.
4095
4096(0.5.0) Changes since version 0.4.2
4097
4098  ++ New features:
4099
4100  * Redesigned operating system emulation layer to make porting easier.
4101
4102  * Better control over TCP output buffers.
4103
4104  * Documenation added.
4105
4106  ++ Bugfixes:
4107
4108  * Locking issues in buffer management.
4109
4110  * Bugfixes in the sequential API.
4111
4112  * IP forwarding could cause memory leakage. This has been fixed.
4113
4114  ++ Other changes:
4115
4116  * Directory structure somewhat changed; the core/ tree has been
4117    collapsed.
4118
4119(0.4.2) Changes since version 0.4.1
4120
4121  ++ New features:
4122
4123  * Experimental ARP implementation added.
4124
4125  * Skeleton Ethernet driver added.
4126
4127  * Experimental BSD socket API library added.
4128
4129  ++ Bugfixes:
4130
4131  * In very intense situations, memory leakage could occur. This has
4132    been fixed.
4133
4134  ++ Other changes:
4135
4136  * Variables named "data" and "code" have been renamed in order to
4137    avoid name conflicts in certain compilers.
4138
4139  * Variable++ have in appliciable cases been translated to ++variable
4140    since some compilers generate better code in the latter case.
4141
4142(0.4.1) Changes since version 0.4
4143
4144  ++ New features:
4145
4146  * TCP: Connection attempts time out earlier than data
4147    transmissions. Nagle algorithm implemented. Push flag set on the
4148    last segment in a burst.
4149
4150  * UDP: experimental support for UDP-Lite extensions.
4151
4152  ++ Bugfixes:
4153
4154  * TCP: out of order segments were in some cases handled incorrectly,
4155    and this has now been fixed. Delayed acknowledgements was broken
4156    in 0.4, has now been fixed. Binding to an address that is in use
4157    now results in an error. Reset connections sometimes hung an
4158    application; this has been fixed.
4159
4160  * Checksum calculation sometimes failed for chained pbufs with odd
4161    lengths. This has been fixed.
4162
4163  * API: a lot of bug fixes in the API. The UDP API has been improved
4164    and tested. Error reporting and handling has been
4165    improved. Logical flaws and race conditions for incoming TCP
4166    connections has been found and removed.
4167
4168  * Memory manager: alignment issues. Reallocating memory sometimes
4169    failed, this has been fixed.
4170
4171  * Generic library: bcopy was flawed and has been fixed.
4172
4173  ++ Other changes:
4174
4175  * API: all datatypes has been changed from generic ones such as
4176    ints, to specified ones such as u16_t. Functions that return
4177    errors now have the correct type (err_t).
4178
4179  * General: A lot of code cleaned up and debugging code removed. Many
4180    portability issues have been fixed.
4181
4182  * The license was changed; the advertising clause was removed.
4183
4184  * C64 port added.
4185
4186  * Thanks: Huge thanks go to Dagan Galarneau, Horst Garnetzke, Petri
4187    Kosunen, Mikael Caleres, and Frits Wilmink for reporting and
4188    fixing bugs!
4189
4190(0.4) Changes since version 0.3.1
4191
4192  * Memory management has been radically changed; instead of
4193    allocating memory from a shared heap, memory for objects that are
4194    rapidly allocated and deallocated is now kept in pools. Allocation
4195    and deallocation from those memory pools is very fast. The shared
4196    heap is still present but is used less frequently.
4197
4198  * The memory, memory pool, and packet buffer subsystems now support
4199    4-, 2-, or 1-byte alignment.
4200
4201  * "Out of memory" situations are handled in a more robust way.
4202
4203  * Stack usage has been reduced.
4204
4205  * Easier configuration of lwIP parameters such as memory usage,
4206    TTLs, statistics gathering, etc. All configuration parameters are
4207    now kept in a single header file "lwipopts.h".
4208
4209  * The directory structure has been changed slightly so that all
4210    architecture specific files are kept under the src/arch
4211    hierarchy.
4212
4213  * Error propagation has been improved, both in the protocol modules
4214    and in the API.
4215
4216  * The code for the RTXC architecture has been implemented, tested
4217    and put to use.
4218
4219  * Bugs have been found and corrected in the TCP, UDP, IP, API, and
4220    the Internet checksum modules.
4221
4222  * Bugs related to porting between a 32-bit and a 16-bit architecture
4223    have been found and corrected.
4224
4225  * The license has been changed slightly to conform more with the
4226    original BSD license, including the advertisement clause.
4227
4228(0.3.1) Changes since version 0.3
4229
4230  * Fix of a fatal bug in the buffer management. Pbufs with allocated
4231    RAM never returned the RAM when the pbuf was deallocated.
4232
4233  * TCP congestion control, window updates and retransmissions did not
4234    work correctly. This has now been fixed.
4235
4236  * Bugfixes in the API.
4237
4238(0.3) Changes since version 0.2
4239
4240  * New and improved directory structure. All include files are now
4241    kept in a dedicated include/ directory.
4242
4243  * The API now has proper error handling. A new function,
4244    netconn_err(), now returns an error code for the connection in
4245    case of errors.
4246
4247  * Improvements in the memory management subsystem. The system now
4248    keeps a pointer to the lowest free memory block. A new function,
4249    mem_malloc2() tries to allocate memory once, and if it fails tries
4250    to free some memory and retry the allocation.
4251
4252  * Much testing has been done with limited memory
4253    configurations. lwIP now does a better job when overloaded.
4254
4255  * Some bugfixes and improvements to the buffer (pbuf) subsystem.
4256
4257  * Many bugfixes in the TCP code:
4258
4259    - Fixed a bug in tcp_close().
4260
4261    - The TCP receive window was incorrectly closed when out of
4262      sequence segments was received. This has been fixed.
4263
4264    - Connections are now timed-out of the FIN-WAIT-2 state.
4265
4266    - The initial congestion window could in some cases be too
4267      large. This has been fixed.
4268
4269    - The retransmission queue could in some cases be screwed up. This
4270      has been fixed.
4271
4272    - TCP RST flag now handled correctly.
4273
4274    - Out of sequence data was in some cases never delivered to the
4275      application. This has been fixed.
4276
4277    - Retransmitted segments now contain the correct acknowledgment
4278      number and advertised window.
4279
4280    - TCP retransmission timeout backoffs are not correctly computed
4281      (ala BSD). After a number of retransmissions, TCP now gives up
4282      the connection.
4283
4284  * TCP connections now are kept on three lists, one for active
4285    connections, one for listening connections, and one for
4286    connections that are in TIME-WAIT. This greatly speeds up the fast
4287    timeout processing for sending delayed ACKs.
4288
4289  * TCP now provides proper feedback to the application when a
4290    connection has been successfully set up.
4291
4292  * More comments have been added to the code. The code has also been
4293    somewhat cleaned up.
4294
4295(0.2) Initial public release.
4296