]> rtime.felk.cvut.cz Git - pes-rpp/rpp-lwip.git/blob - CHANGELOG
sys_arch.txt, api.h, api_lib.c, api_msg.h, api_msg.c, tcpip.c, sys.h, opt.h: Introduc...
[pes-rpp/rpp-lwip.git] / CHANGELOG
1 FUTURE
2
3   * TODO: The lwIP source code makes some invalid assumptions on processor
4     word-length, storage sizes and alignment. See the mailing lists for
5     problems with exoteric (/DSP) architectures showing these problems.
6     We still have to fix some of these issues neatly.
7
8   * TODO: the PPP code is broken in a few ways. There are namespace
9     collisions on BSD systems and many assumptions on word-length
10     (sizeof(int)). In ppp.c an assumption is made on the availability of
11     a thread subsystem. Either PPP needs to be moved to contrib/ports/???
12     or rearranged to be more generic.
13
14 HISTORY
15
16 (CVS HEAD)
17
18   * [Enter new changes just after this line - do not remove this line]
19
20   ++ New features:
21
22   2008-01-05 Frédéric Bernon
23   * sys_arch.txt, api.h, api_lib.c, api_msg.h, api_msg.c, tcpip.c, sys.h, opt.h:
24     Introduce changes for task #7490 "Add return value to sys_mbox_post" with some
25     modifications in the sys_mbox api: sys_mbox_new take a "size" parameters which
26     indicate the number of pointers query by the mailbox. There is three defines
27     in opt.h to indicate sizes for tcpip::mbox, netconn::recvmbox, and for the 
28     netconn::acceptmbox. Port maintainers, you can decide to just add this new 
29     parameter in your implementation, but to ignore it to keep the previous behavior.
30     The new sys_mbox_trypost function return a value to know if the mailbox is
31     full or if the message is posted. Take a look to sys_arch.txt for more details.
32     This new function is used in tcpip_input (so, can be called in an interrupt
33     context since the function is not blocking), and in recv_udp and recv_raw.
34
35   2008-01-04 Frédéric Bernon, Simon Goldschmidt, Jonathan Larmour
36   * rawapi.txt, api.h, api_lib.c, api_msg.h, api_msg.c, sockets.c, tcp.h, tcp.c,
37     tcp_in.c, init.c, opt.h: rename backlog options with TCP_ prefix, limit the
38     "backlog" parameter in an u8_t, 0 is interpreted as "smallest queue", add
39     documentation in the rawapi.txt file.
40
41   2007-12-31 Kieran Mansley (based on patch from Per-Henrik Lundbolm)
42   * tcp.c, tcp_in.c, tcp_out.c, tcp.h: Add TCP persist timer
43
44   2007-12-31 Frédéric Bernon, Luca Ceresoli
45   * autoip.c, etharp.c: ip_addr.h: Integrate patch #6348: "Broadcast ARP packets
46     in autoip". The change in etharp_raw could be removed, since all calls to
47     etharp_raw use ethbroadcast for the "ethdst_addr" parameter. But it could be
48     wrong in the future.
49
50   2007-12-30 Frédéric Bernon, Tom Evans
51   * ip.c: Fix bug #21846 "LwIP doesn't appear to perform any IP Source Address
52     Filtering" reported by Tom Evans.
53
54   2007-12-21 Frédéric Bernon, Simon Goldschmidt, Jonathan Larmour
55   * tcp.h, opt.h, api.h, api_msg.h, tcp.c, tcp_in.c, api_lib.c, api_msg.c,
56     sockets.c, init.c: task #7252: Implement TCP listen backlog: Warning: raw API
57     applications have to call 'tcp_accepted(pcb)' in their accept callback to
58     keep accepting new connections.
59
60   2007-12-13 Frédéric Bernon
61   * api_msg.c, err.h, err.c, sockets.c, dns.c, dns.h: replace "enum dns_result"
62     by err_t type. Add a new err_t code "ERR_INPROGRESS".
63
64   2007-12-12 Frédéric Bernon
65   * dns.h, dns.c, opt.h: move DNS options to the "right" place. Most visibles
66     are the one which have ram usage.
67
68   2007-12-05 Frédéric Bernon
69   * netdb.c: add a LWIP_DNS_API_HOSTENT_STORAGE option to decide to use a static
70     set of variables (=0) or a local one (=1). In this last case, your port should
71     provide a function "struct hostent* sys_thread_hostent( struct hostent* h)"
72     which have to do a copy of "h" and return a pointer ont the "per-thread" copy.
73
74   2007-12-03 Simon Goldschmidt
75   * ip.c: ip_input: check if a packet is for inp first before checking all other
76     netifs on netif_list (speeds up packet receiving in most cases)
77
78   2007-11-30 Simon Goldschmidt
79   * udp.c, raw.c: task #7497: Sort lists (pcb, netif, ...) for faster access
80     UDP: move a (connected) pcb selected for input to the front of the list of
81     pcbs so that it is found faster next time. Same for RAW pcbs that have eaten
82     a packet.
83
84   2007-11-28 Simon Goldschmidt
85   * etharp.c, stats.c, stats.h, opt.h: Introduced ETHARP_STATS
86
87   2007-11-25 Simon Goldschmidt
88   * dhcp.c: dhcp_unfold_reply() uses pbuf_copy_partial instead of its own copy
89     algorithm.
90
91   2007-11-24 Simon Goldschmidt
92   * netdb.h, netdb.c, sockets.h/.c: Moved lwip_gethostbyname from sockets.c
93     to the new file netdb.c; included lwip_getaddrinfo.
94
95   2007-11-21 Simon Goldschmidt
96   * tcp.h, opt.h, tcp.c, tcp_in.c: implemented calculating the effective send-mss
97     based on the MTU of the netif used to send. Enabled by default. Disable by
98     setting LWIP_CALCULATE_EFF_SEND_MSS to 0. This fixes bug #21535.
99
100   2007-11-19 Frédéric Bernon
101   * api_msg.c, dns.h, dns.c: Implement DNS_DOES_NAME_CHECK option (check if name
102     received match the name query), implement DNS_USES_STATIC_BUF (the place where
103     copy dns payload to parse the response), return an error if there is no place
104     for a new query, and fix some minor problems.
105
106   2007-11-16 Simon Goldschmidt
107   * new files: ipv4/inet.c, ipv4/inet_chksum.c, ipv6/inet6.c
108     removed files: core/inet.c, core/inet6.c
109     Moved inet files into ipv4/ipv6 directory; splitted inet.c/inet.h into
110     inet and chksum part; changed includes in all lwIP files as appropriate
111
112   2007-11-16 Simon Goldschmidt
113   * api.h, api_msg.h, api_lib.c, api_msg.c, socket.h, socket.c: Added sequential
114     dns resolver function for netconn api (netconn_gethostbyname) and socket api
115     (gethostbyname/gethostbyname_r).
116
117   2007-11-15 Jim Pettinato, Frédéric Bernon
118   * opt.h, init.c, tcpip.c, dhcp.c, dns.h, dns.c: add DNS client for simple name
119     requests with RAW api interface. Initialization is done in lwip_init() with
120     build time options. DNS timer is added in tcpip_thread context. DHCP can set
121     DNS server ip addresses when options are received. You need to set LWIP_DNS=1
122     in your lwipopts.h file (LWIP_DNS=0 in opt.h). DNS_DEBUG can be set to get
123     some traces with LWIP_DEBUGF. Sanity check have been added. There is a "todo"
124     list with points to improve.
125
126   2007-11-06 Simon Goldschmidt
127   * opt.h, mib2.c: Patch #6215: added ifAdminStatus write support (if explicitly
128     enabled by defining SNMP_SAFE_REQUESTS to 0); added code to check link status
129     for ifOperStatus if LWIP_NETIF_LINK_CALLBACK is defined.
130
131   2007-11-06 Simon Goldschmidt
132   * api.h, api_msg.h and dependent files: Task #7410: Removed the need to include
133     core header files in api.h (ip/tcp/udp/raw.h) to hide the internal
134     implementation from netconn api applications.
135
136   2007-11-03 Frédéric Bernon
137   * api.h, api_lib.c, api_msg.c, sockets.c, opt.h: add SO_RCVBUF option for UDP &
138     RAW netconn. You need to set LWIP_SO_RCVBUF=1 in your lwipopts.h (it's disabled
139     by default). Netconn API users can use the netconn_recv_bufsize macro to access
140     it. This is a first release which have to be improve for TCP. Note it used the
141     netconn::recv_avail which need to be more "thread-safe" (note there is already
142     the problem for FIONREAD with lwip_ioctl/ioctlsocket).
143
144   2007-11-01 Frédéric Bernon, Marc Chaland
145   * sockets.h, sockets.c, api.h, api_lib.c, api_msg.h, api_msg.c, tcp.h, tcp_out.c:
146     Integrate "patch #6250 : MSG_MORE flag for send". MSG_MORE is used at socket api
147     layer, NETCONN_MORE at netconn api layer, and TCP_WRITE_FLAG_MORE at raw api
148     layer. This option enable to delayed TCP PUSH flag on multiple "write" calls.
149     Note that previous "copy" parameter for "write" APIs is now called "apiflags".
150
151   2007-10-24 Frédéric Bernon
152   * api.h, api_lib.c, api_msg.c: Add macro API_EVENT in the same spirit than 
153     TCP_EVENT_xxx macros to get a code more readable. It could also help to remove
154     some code (like we have talk in "patch #5919 : Create compile switch to remove
155     select code"), but it could be done later.
156
157   2007-10-08 Simon Goldschmidt
158   * many files: Changed initialization: many init functions are not needed any
159     more since we now rely on the compiler initializing global and static
160     variables to zero!
161
162   2007-10-06 Simon Goldschmidt
163   * ip_frag.c, memp.c, mib2.c, ip_frag.h, memp_std.h, opt.h: Changed IP_REASSEMBLY
164     to enqueue the received pbufs so that multiple packets can be reassembled
165     simultaneously and no static reassembly buffer is needed.
166
167   2007-10-05 Simon Goldschmidt
168   * tcpip.c, etharp.h, etharp.c: moved ethernet_input from tcpip.c to etharp.c so
169     all netifs (or ports) can use it.
170
171   2007-10-05 Frédéric Bernon
172   * netifapi.h, netifapi.c: add function netifapi_netif_set_default. Change the 
173     common function to reduce a little bit the footprint (for all functions using
174     only the "netif" parameter).
175
176   2007-10-03 Frédéric Bernon
177   * netifapi.h, netifapi.c: add functions netifapi_netif_set_up, netifapi_netif_set_down,
178     netifapi_autoip_start and netifapi_autoip_stop. Use a common function to reduce
179     a little bit the footprint (for all functions using only the "netif" parameter).
180
181   2007-09-15 Frédéric Bernon
182   * udp.h, udp.c, sockets.c: Changes for "#20503 IGMP Improvement". Add IP_MULTICAST_IF
183     option in socket API, and a new field "multicast_ip" in "struct udp_pcb" (for
184     netconn and raw API users), only if LWIP_IGMP=1. Add getsockopt processing for
185     IP_MULTICAST_TTL and IP_MULTICAST_IF.
186
187   2007-09-10 Frédéric Bernon
188   * snmp.h, mib2.c: enable to remove SNMP timer (which consumne several cycles
189     even when it's not necessary). snmp_agent.txt tell to call snmp_inc_sysuptime()
190     each 10ms (but, it's intrusive if you use sys_timeout feature). Now, you can
191     decide to call snmp_add_sysuptime(100) each 1000ms (which is bigger "step", but
192     call to a lower frequency). Or, you can decide to not call snmp_inc_sysuptime()
193     or snmp_add_sysuptime(), and to define the SNMP_GET_SYSUPTIME(sysuptime) macro.
194     This one is undefined by default in mib2.c. SNMP_GET_SYSUPTIME is called inside
195     snmp_get_sysuptime(u32_t *value), and enable to change "sysuptime" value only
196     when it's queried (any direct call to "sysuptime" is changed by a call to 
197     snmp_get_sysuptime).
198
199   2007-09-09 Frédéric Bernon, Bill Florac
200   * igmp.h, igmp.c, netif.h, netif.c, ip.c: To enable to have interfaces with IGMP,
201     and others without it, there is a new NETIF_FLAG_IGMP flag to set in netif->flags
202     if you want IGMP on an interface. igmp_stop() is now called inside netif_remove().
203     igmp_report_groups() is now called inside netif_set_link_up() (need to have
204     LWIP_NETIF_LINK_CALLBACK=1) to resend reports once the link is up (avoid to wait
205     the next query message to receive the matching multicast streams).
206
207   2007-09-08 Frédéric Bernon
208   * sockets.c, ip.h, api.h, tcp.h: declare a "struct ip_pcb" which only contains
209     IP_PCB. Add in the netconn's "pcb" union a "struct ip_pcb *ip;" (no size change).
210     Use this new field to access to common pcb fields (ttl, tos, so_options, etc...).
211     Enable to access to these fields with LWIP_TCP=0.
212
213   2007-09-05 Frédéric Bernon
214   * udp.c, ipv4/icmp.c, ipv4/ip.c, ipv6/icmp.c, ipv6/ip6.c, ipv4/icmp.h,
215     ipv6/icmp.h, opt.h: Integrate "task #7272 : LWIP_ICMP option". The new option
216     LWIP_ICMP enable/disable ICMP module inside the IP stack (enable per default).
217     Be careful, disabling ICMP make your product non-compliant to RFC1122, but
218     help to reduce footprint, and to reduce "visibility" on the Internet.
219
220   2007-09-05 Frédéric Bernon, Bill Florac
221   * opt.h, sys.h, tcpip.c, slipif.c, ppp.c, sys_arch.txt: Change parameters list
222     for sys_thread_new (see "task #7252 : Create sys_thread_new_ex()"). Two new
223     parameters have to be provided: a task name, and a task stack size. For this
224     one, since it's platform dependant, you could define the best one for you in
225     your lwipopts.h. For port maintainers, you can just add these new parameters
226     in your sys_arch.c file, and but it's not mandatory, use them in your OS
227     specific functions.
228
229   2007-09-05 Frédéric Bernon
230   * inet.c, autoip.c, msg_in.c, msg_out.c, init.c: Move some build time checkings
231     inside init.c for task #7142 "Sanity check user-configurable values".
232
233   2007-09-04 Frédéric Bernon, Bill Florac
234   * igmp.h, igmp.c, memp_std.h, memp.c, init.c, opt.h: Replace mem_malloc call by
235     memp_malloc, and use a new MEMP_NUM_IGMP_GROUP option (see opt.h to define the
236     value). It will avoid potential fragmentation problems, use a counter to know
237     how many times a group is used on an netif, and free it when all applications
238     leave it. MEMP_NUM_IGMP_GROUP got 8 as default value (and init.c got a sanity
239     check if LWIP_IGMP!=0).
240
241   2007-09-03 Frédéric Bernon
242   * igmp.h, igmp.c, sockets.c, api_msg.c: Changes for "#20503 IGMP Improvement".
243     Initialize igmp_mac_filter to NULL in netif_add (this field should be set in
244     the netif's "init" function). Use the "imr_interface" field (for socket layer)
245     and/or the "interface" field (for netconn layer), for join/leave operations.
246     The igmp_join/leavegroup first parameter change from a netif to an ipaddr.
247     This field could be a netif's ipaddr, or "any" (same meaning than ip_addr_isany).
248
249   2007-08-30 Frédéric Bernon
250   * Add netbuf.h, netbuf.c, Change api.h, api_lib.c: #7249 "Split netbuf functions
251     from api/api_lib". Now netbuf API is independant of netconn, and can be used
252     with other API (application based on raw API, or future "socket2" API). Ports
253     maintainers just have to add src/api/netbuf.c in their makefile/projects.
254
255   2007-08-30 Frédéric Bernon, Jonathan Larmour
256   * init.c: Add first version of lwip_sanity_check for task #7142 "Sanity check
257     user-configurable values".
258
259   2007-08-29 Frédéric Bernon
260   * igmp.h, igmp.c, tcpip.c, init.c, netif.c: change igmp_init and add igmp_start.
261     igmp_start is call inside netif_add. Now, igmp initialization is in the same
262     spirit than the others modules. Modify some IGMP debug traces.
263
264   2007-08-29 Frédéric Bernon
265   * Add init.h, init.c, Change opt.h, tcpip.c: Task  #7213 "Add a lwip_init function"
266     Add lwip_init function to regroup all modules initializations, and to provide
267     a place to add code for task #7142 "Sanity check user-configurable values".
268     Ports maintainers should remove direct initializations calls from their code,
269     and add init.c in their makefiles. Note that lwip_init() function is called
270     inside tcpip_init, but can also be used by raw api users since all calls are
271     disabled when matching options are disabled. Also note that their is new options
272     in opt.h, you should configure in your lwipopts.h (they are enabled per default).
273
274   2007-08-26 Marc Boucher
275   * api_msg.c: do_close_internal(): Reset the callbacks and arg (conn) to NULL
276     since they can under certain circumstances be called with an invalid conn
277     pointer after the connection has been closed (and conn has been freed). 
278
279   2007-08-25 Frédéric Bernon (Artem Migaev's Patch)
280   * netif.h, netif.c: Integrate "patch #6163 : Function to check if link layer is up".
281     Add a netif_is_link_up() function if LWIP_NETIF_LINK_CALLBACK option is set.
282
283   2007-08-22 Frédéric Bernon
284   * netif.h, netif.c, opt.h: Rename LWIP_NETIF_CALLBACK in LWIP_NETIF_STATUS_CALLBACK
285     to be coherent with new LWIP_NETIF_LINK_CALLBACK option before next release.
286
287   2007-08-22 Frédéric Bernon
288   * tcpip.h, tcpip.c, ethernetif.c, opt.h: remove options ETHARP_TCPIP_INPUT &
289     ETHARP_TCPIP_ETHINPUT, now, only "ethinput" code is supported, even if the 
290     name is tcpip_input (we keep the name of 1.2.0 function).
291
292   2007-08-17 Jared Grubb
293   * memp_std.h, memp.h, memp.c, mem.c, stats.c: (Task #7136) Centralize mempool 
294     settings into new memp_std.h and optional user file lwippools.h. This adds
295     more dynamic mempools, and allows the user to create an arbitrary number of
296     mempools for mem_malloc.
297
298   2007-08-16 Marc Boucher
299   * api_msg.c: Initialize newconn->state to NETCONN_NONE in accept_function;
300     otherwise it was left to NETCONN_CLOSE and sent_tcp() could prematurely
301     close the connection.
302
303   2007-08-16 Marc Boucher
304   * sockets.c: lwip_accept(): check netconn_peer() error return.
305
306   2007-08-16 Marc Boucher
307   * mem.c, mem.h: Added mem_calloc().
308
309   2007-08-16 Marc Boucher
310   * tcpip.c, tcpip.h memp.c, memp.h: Added distinct memp (MEMP_TCPIP_MSG_INPKT)
311     for input packets to prevent floods from consuming all of MEMP_TCPIP_MSG
312     and starving other message types.
313     Renamed MEMP_TCPIP_MSG to MEMP_TCPIP_MSG_API
314
315   2007-08-16 Marc Boucher
316   * pbuf.c, pbuf.h, etharp.c, tcp_in.c, sockets.c: Split pbuf flags in pbuf
317     type and flgs (later renamed to flags).
318     Use enum pbuf_flag as pbuf_type.  Renumber PBUF_FLAG_*.
319     Improved lwip_recvfrom().  TCP push now propagated.
320
321   2007-08-16 Marc Boucher
322   * ethernetif.c, contrib/ports/various: ethbroadcast now a shared global
323     provided by etharp.
324
325   2007-08-16 Marc Boucher
326   * ppp_oe.c ppp_oe.h, auth.c chap.c fsm.c lcp.c ppp.c ppp.h,
327     etharp.c ethernetif.c, etharp.h, opt.h tcpip.h, tcpip.c:
328     Added PPPoE support and various PPP improvements.
329
330   2007-07-25 Simon Goldschmidt
331   * api_lib.c, ip_frag.c, pbuf.c, api.h, pbuf.h: Introduced pbuf_copy_partial,
332     making netbuf_copy_partial use this function.
333
334   2007-07-25 Simon Goldschmidt
335   * tcp_in.c: Fix bug #20506: Slow start / initial congestion window starts with
336     2 * mss (instead of 1 * mss previously) to comply with some newer RFCs and
337     other stacks.
338
339   2007-07-13 Jared Grubb (integrated by Frédéric Bernon)
340   * opt.h, netif.h, netif.c, ethernetif.c: Add new configuration option to add
341     a link callback in the netif struct, and functions to handle it. Be carefull
342     for port maintainers to add the NETIF_FLAG_LINK_UP flag (like in ethernetif.c)
343     if you want to be sure to be compatible with future changes...
344
345   2007-06-30 Frédéric Bernon
346   * sockets.h, sockets.c: Implement MSG_PEEK flag for recv/recvfrom functions.
347
348   2007-06-21 Simon Goldschmidt
349   * etharp.h, etharp.c: Combined etharp_request with etharp_raw for both
350     LWIP_AUTOIP =0 and =1 to remove redundant code.
351
352   2007-06-21 Simon Goldschmidt
353   * mem.c, memp.c, mem.h, memp.h, opt.h: task #6863: Introduced the option
354     MEM_USE_POOLS to use 4 pools with different sized elements instead of a
355     heap. This both prevents memory fragmentation and gives a higher speed
356     at the cost of more memory consumption. Turned off by default.
357
358   2007-06-21 Simon Goldschmidt
359   * api_lib.c, api_msg.c, api.h, api_msg.h: Converted the length argument of
360     netconn_write (and therefore also api_msg_msg.msg.w.len) from u16_t into
361     int to be able to send a bigger buffer than 64K with one time (mainly
362     used from lwip_send).
363
364   2007-06-21 Simon Goldschmidt
365   * tcp.h, api_msg.c: Moved the nagle algorithm from netconn_write/do_write
366     into a define (tcp_output_nagle) in tcp.h to provide it to raw api users, too.
367
368   2007-06-21 Simon Goldschmidt
369   * api.h, api_lib.c, api_msg.c: Fixed bug #20021: Moved sendbuf-processing in
370     netconn_write from api_lib.c to api_msg.c to also prevent multiple context-
371     changes on low memory or empty send-buffer.
372
373   2007-06-18 Simon Goldschmidt
374   * etharp.c, etharp.h: Changed etharp to use a defined hardware address length
375     of 6 to avoid loading netif->hwaddr_len every time (since this file is only
376     used for ethernet and struct eth_addr already had a defined length of 6).
377
378   2007-06-17 Simon Goldschmidt
379   * sockets.c, sockets.h: Implemented socket options SO_NO_CHECK for UDP sockets
380     to disable UDP checksum generation on transmit.
381
382   2007-06-13 Frédéric Bernon, Simon Goldschmidt
383   * debug.h, api_msg.c: change LWIP_ERROR to use it to check errors like invalid
384     pointers or parameters, and let the possibility to redefined it in cc.h. Use
385     this macro to check "conn" parameter in api_msg.c functions.
386
387   2007-06-11 Simon Goldschmidt
388   * sockets.c, sockets.h: Added UDP lite support for sockets
389
390   2007-06-10 Simon Goldschmidt
391   * udp.h, opt.h, api_msg.c, ip.c, udp.c: Included switch LWIP_UDPLITE (enabled
392     by default) to switch off UDP-Lite support if not needed (reduces udp.c code
393     size)
394
395   2007-06-09 Dominik Spies (integrated by Frédéric Bernon)
396   * autoip.h, autoip.c, dhcp.h, dhcp.c, netif.h, netif.c, etharp.h, etharp.c, opt.h:
397     AutoIP implementation available for IPv4, with new options LWIP_AUTOIP and
398     LWIP_DHCP_AUTOIP_COOP if you want to cooperate with DHCP. Some tips to adapt
399     (see TODO mark in the source code).
400
401   2007-06-09 Simon Goldschmidt
402   * etharp.h, etharp.c, ethernetif.c: Modified order of parameters for
403     etharp_output() to match netif->output so etharp_output() can be used
404     directly as netif->output to save one function call.
405
406   2007-06-08 Simon Goldschmidt
407   * netif.h, ethernetif.c, slipif.c, loopif.c: Added define
408     NETIF_INIT_SNMP(netif, type, speed) to initialize per-netif snmp variables,
409     added initialization of those to ethernetif, slipif and loopif.
410
411   2007-05-18 Simon Goldschmidt
412   * opt.h, ip_frag.c, ip_frag.h, ip.c: Added option IP_FRAG_USES_STATIC_BUF
413     (defaulting to off for now) that can be set to 0 to send fragmented
414     packets by passing PBUF_REFs down the stack.
415
416   2007-05-23 Frédéric Bernon
417   * api_lib.c: Implement SO_RCVTIMEO for accept and recv on TCP
418     connections, such present in patch #5959.
419
420   2007-05-23 Frédéric Bernon
421   * api.h, api_lib.c, api_msg.c, sockets.c: group the different NETCONN_UDPxxx
422     code in only one part...
423
424   2007-05-18 Simon Goldschmidt
425   * opt.h, memp.h, memp.c: Added option MEMP_OVERFLOW_CHECK to check for memp
426     elements to overflow. This is achieved by adding some bytes before and after
427     each pool element (increasing their size, of course), filling them with a
428     prominent value and checking them on freeing the element.
429     Set it to 2 to also check every element in every pool each time memp_malloc()
430     or memp_free() is called (slower but more helpful).
431
432   2007-05-10 Simon Goldschmidt
433   * opt.h, memp.h, memp.c, pbuf.c (see task #6831): use a new memp pool for
434     PBUF_POOL pbufs instead of the old pool implementation in pbuf.c to reduce
435     code size.
436
437   2007-05-11 Frédéric Bernon
438   * sockets.c, api_lib.c, api_msg.h, api_msg.c, netifapi.h, netifapi.c, tcpip.c:
439     Include a function pointer instead of a table index in the message to reduce
440     footprint. Disable some part of lwip_send and lwip_sendto if some options are
441     not set (LWIP_TCP, LWIP_UDP, LWIP_RAW).
442
443   2007-05-10 Simon Goldschmidt
444   * *.h (except netif/ppp/*.h): Included patch #5448: include '#ifdef __cplusplus
445     \ extern "C" {' in all header files. Now you can write your application using
446     the lwIP stack in C++ and simply #include the core files. Note I have left
447     out the netif/ppp/*h header files for now, since I don't know which files are
448     included by applications and which are for internal use only.
449
450   2007-05-09 Simon Goldschmidt
451   * opt.h, *.c/*.h: Included patch #5920: Create define to override C-library
452     memcpy. 2 Defines are created: MEMCPY() for normal memcpy, SMEMCPY() for
453     situations where some compilers might inline the copy and save a function
454     call. Also replaced all calls to memcpy() with calls to (S)MEMCPY().
455
456   2007-05-08 Simon Goldschmidt
457   * mem.h: If MEM_LIBC_MALLOC==1, allow the defines (e.g. mem_malloc() -> malloc())
458     to be overriden in case the C-library malloc implementation is not protected
459     against concurrent access.
460
461   2007-05-04 Simon Goldschmidt (Atte Kojo)
462   * etharp.c: Introduced fast one-entry-cache to speed up ARP lookup when sending
463     multiple packets to the same host.
464
465   2007-05-04 Frédéric Bernon, Jonathan Larmour
466   * sockets.c, api.h, api_lib.c, api_msg.h, api_msg.c: Fix bug #19162 "lwip_sento: a possible
467     to corrupt remote addr/port connection state". Reduce problems "not enought memory" with
468     netbuf (if we receive lot of datagrams). Improve lwip_sendto (only one exchange between
469     sockets api and api_msg which run in tcpip_thread context). Add netconn_sento function.
470     Warning, if you directly access to "fromaddr" & "fromport" field from netbuf struct,
471     these fields are now renamed "addr" & "port".
472
473   2007-04-11 Jonathan Larmour
474   * sys.h, api_lib.c: Provide new sys_mbox_tryfetch function. Require ports to provide new
475     sys_arch_mbox_tryfetch function to get a message if one is there, otherwise return
476     with SYS_MBOX_EMPTY. sys_arch_mbox_tryfetch can be implemented as a function-like macro
477     by the port in sys_arch.h if desired.
478
479   2007-04-06 Frédéric Bernon, Simon Goldschmidt
480   * opt.h, tcpip.h, tcpip.c, netifapi.h, netifapi.c: New configuration option LWIP_NETIF_API
481     allow to use thread-safe functions to add/remove netif in list, and to start/stop dhcp
482     clients, using new functions from netifapi.h. Disable as default (no port change to do).
483
484   2007-04-05 Frédéric Bernon
485   * sockets.c: remplace ENOBUFS errors on alloc_socket by ENFILE to be more BSD compliant.
486
487   2007-04-04 Simon Goldschmidt
488   * arch.h, api_msg.c, dhcp.c, msg_in.c, sockets.c: Introduced #define LWIP_UNUSED_ARG(x)
489     use this for and architecture-independent form to tell the compiler you intentionally
490     are not using this variable. Can be overriden in cc.h.
491
492   2007-03-28 Frédéric Bernon
493   * opt.h, netif.h, dhcp.h, dhcp.c: New configuration option LWIP_NETIF_HOSTNAME allow to
494     define a hostname in netif struct (this is just a pointer, so, you can use a hardcoded
495     string, point on one of your's ethernetif field, or alloc a string you will free yourself).
496     It will be used by DHCP to register a client hostname, but can also be use when you call
497     snmp_set_sysname.
498
499   2007-03-28 Frédéric Bernon
500   * netif.h, netif.c: A new NETIF_FLAG_ETHARP flag is defined in netif.h, to allow to 
501     initialize a network interface's flag with. It tell this interface is an ethernet
502     device, and we can use ARP with it to do a "gratuitous ARP" (RFC 3220 "IP Mobility
503     Support for IPv4" section 4.6) when interface is "up" with netif_set_up().
504
505   2007-03-26 Frédéric Bernon, Jonathan Larmour
506   * opt.h, tcpip.c: New configuration option LWIP_ARP allow to disable ARP init at build
507     time if you only use PPP or SLIP. The default is enable. Note we don't have to call 
508     etharp_init in your port's initilization sequence if you use tcpip.c, because this call
509     is done in tcpip_init function.
510
511   2007-03-22 Frédéric Bernon
512   * stats.h, stats.c, msg_in.c: Stats counters can be change to u32_t if necessary with the
513     new option LWIP_STATS_LARGE. If you need this option, define LWIP_STATS_LARGE to 1 in
514     your lwipopts.h. More, unused counters are not defined in the stats structs, and not 
515     display by stats_display(). Note that some options (SYS_STATS and RAW_STATS) are defined
516     but never used. Fix msg_in.c with the correct #if test for a stat display.
517
518   2007-03-21 Kieran Mansley
519   * netif.c, netif.h: Apply patch#4197 with some changes (originator: rireland@hmgsl.com). 
520     Provides callback on netif up/down state change.
521
522   2007-03-11 Frédéric Bernon, Mace Gael, Steve Reynolds
523   * sockets.h, sockets.c, api.h, api_lib.c, api_msg.h, api_msg.c, igmp.h, igmp.c,
524     ip.c, netif.h, tcpip.c, opt.h:
525     New configuration option LWIP_IGMP to enable IGMP processing. Based on only one 
526     filter per all network interfaces. Declare a new function in netif to enable to
527     control the MAC filter (to reduce lwIP traffic processing).
528
529   2007-03-11 Frédéric Bernon
530   * tcp.h, tcp.c, sockets.c, tcp_out.c, tcp_in.c, opt.h: Keepalive values can
531     be configured at run time with LWIP_TCP_KEEPALIVE, but don't change this
532     unless you know what you're doing (default are RFC1122 compliant). Note
533     that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set in seconds.
534
535   2007-03-08 Frédéric Bernon
536   * tcp.h: Keepalive values can be configured at compile time, but don't change
537     this unless you know what you're doing (default are RFC1122 compliant).
538
539   2007-03-08 Frédéric Bernon
540   * sockets.c, api.h, api_lib.c, tcpip.c, sys.h, sys.c, err.c, opt.h:
541     Implement LWIP_SO_RCVTIMEO configuration option to enable/disable SO_RCVTIMEO
542     on UDP sockets/netconn.
543
544   2007-03-08 Simon Goldschmidt
545   * snmp_msg.h, msg_in.c: SNMP UDP ports can be configured at compile time.
546
547   2007-03-06 Frédéric Bernon
548   * api.h, api_lib.c, sockets.h, sockets.c, tcpip.c, sys.h, sys.c, err.h: 
549     Implement SO_RCVTIMEO on UDP sockets/netconn.
550
551   2007-02-28 Kieran Mansley (based on patch from Simon Goldschmidt)
552   * api_lib.c, tcpip.c, memp.c, memp.h: make API msg structs allocated
553     on the stack and remove the API msg type from memp
554
555   2007-02-26 Jonathan Larmour (based on patch from Simon Goldschmidt)
556   * sockets.h, sockets.c: Move socket initialization to new
557     lwip_socket_init() function.
558     NOTE: this changes the API with ports. Ports will have to be
559     updated to call lwip_socket_init() now.
560
561   2007-02-26 Jonathan Larmour (based on patch from Simon Goldschmidt)
562   * api_lib.c: Use memcpy in netbuf_copy_partial.
563
564
565   ++ Bug fixes:
566
567   2007-12-21 Simon Goldschmidt
568   * sys.h, api_lib.c, api_msg.c, sockets.c: fix bug #21698: "netconn->recv_avail
569     is not protected" by using new macros for interlocked access to modify/test
570     netconn->recv_avail.
571
572   2007-12-20 Kieran Mansley (based on patch from Oleg Tyshev)
573   * tcp_in.c: fix bug# 21535 (nrtx not reset correctly in SYN_SENT state)
574
575   2007-12-20 Kieran Mansley (based on patch from Per-Henrik Lundbolm)
576   * tcp.c, tcp_in.c, tcp_out.c, tcp.h: fix bug #20199 (better handling
577     of silly window avoidance and prevent lwIP from shrinking the window)
578
579   2007-12-04 Simon Goldschmidt
580   * tcp.c, tcp_in.c: fix bug #21699 (segment leak in ooseq processing when last
581     data packet was lost): add assert that all segment lists are empty in
582     tcp_pcb_remove before setting pcb to CLOSED state; don't directly set CLOSED
583     state from LAST_ACK in tcp_process
584
585   2007-12-02 Simon Goldschmidt
586   * sockets.h: fix bug #21654: exclude definition of struct timeval from #ifndef FD_SET
587     If including <sys/time.h> for system-struct timeval, LWIP_TIMEVAL_PRIVATE now
588     has to be set to 0 in lwipopts.h
589
590   2007-12-02 Simon Goldschmidt
591   * api_msg.c, api_lib.c: fix bug #21656 (recvmbox problem in netconn API): always
592     allocate a recvmbox in netconn_new_with_proto_and_callback. For a tcp-listen
593     netconn, this recvmbox is later freed and a new mbox is allocated for acceptmbox.
594     This is a fix for thread-safety and allocates all items needed for a netconn
595     when the netconn is created.
596
597   2007-11-30 Simon Goldschmidt
598   * udp.c: first attempt to fix bug #21655 (DHCP doesn't work reliably with multiple
599     netifs): if LWIP_DHCP is enabled, UDP packets to DHCP_CLIENT_PORT are passed
600     to netif->dhcp->pcb only (if that exists) and not to any other pcb for the same
601     port (only solution to let UDP pcbs 'bind' to a netif instead of an IP address)
602
603   2007-11-27 Simon Goldschmidt
604   * ip.c: fixed bug #21643 (udp_send/raw_send don't fail if netif is down) by
605     letting ip_route only use netifs that are up.
606
607   2007-11-27 Simon Goldschmidt
608   * err.h, api_lib.c, api_msg.c, sockets.c: Changed error handling: ERR_MEM, ERR_BUF
609     and ERR_RTE are seen as non-fatal, all other errors are fatal. netconns and
610     sockets block most operations once they have seen a fatal error.
611
612   2007-11-27 Simon Goldschmidt
613   * udp.h, udp.c, dhcp.c: Implemented new function udp_sendto_if which takes the
614     netif to send as an argument (to be able to send on netifs that are down).
615
616   2007-11-26 Simon Goldschmidt
617   * tcp_in.c: Fixed bug #21582: pcb->acked accounting can be wrong when ACKs
618     arrive out-of-order
619
620   2007-11-21 Simon Goldschmidt
621   * tcp.h, tcp_out.c, api_msg.c: Fixed bug #20287: tcp_output_nagle sends too early
622     Fixed the nagle algorithm; nagle now also works for all raw API applications
623     and has to be explicitly disabled with 'tcp_pcb->flags |= TF_NODELAY'
624
625   2007-11-12 Frédéric Bernon
626   * sockets.c, api.h, api_lib.c, api_msg.h, api_msg.c: Fixed bug #20900. Now, most
627     of the netconn_peer and netconn_addr processing is done inside tcpip_thread
628     context in do_getaddr.
629
630   2007-11-10 Simon Goldschmidt
631   * etharp.c: Fixed bug: assert fired when MEMP_ARP_QUEUE was empty (which can
632     happen any time). Now the packet simply isn't enqueued when out of memory.
633
634   2007-11-01 Simon Goldschmidt
635   * tcp.c, tcp_in.c: Fixed bug #21494: The send mss (pcb->mss) is set to 536 (or
636     TCP_MSS if that is smaller) as long as no MSS option is received from the
637     remote host.
638
639   2007-11-01 Simon Goldschmidt
640   * tcp.h, tcp.c, tcp_in.c: Fixed bug #21491: The MSS option sent (with SYN)
641     is now based on TCP_MSS instead of pcb->mss (on passive open now effectively
642     sending our configured TCP_MSS instead of the one received).
643
644   2007-11-01 Simon Goldschmidt
645   * tcp_in.c: Fixed bug #21181: On active open, the initial congestion window was
646     calculated based on the configured TCP_MSS, not on the MSS option received
647     with SYN+ACK.
648
649   2007-10-09 Simon Goldschmidt
650   * udp.c, inet.c, inet.h: Fixed UDPLite: send: Checksum was always generated too
651     short and also was generated wrong if checksum coverage != tot_len;
652     receive: checksum was calculated wrong if checksum coverage != tot_len
653
654   2007-10-08 Simon Goldschmidt
655   * mem.c: lfree was not updated in mem_realloc!
656
657   2007-10-07 Frédéric Bernon
658   * sockets.c, api.h, api_lib.c: First step to fix "bug #20900 : Potential
659     crash error problem with netconn_peer & netconn_addr". VERY IMPORTANT:
660     this change cause an API breakage for netconn_addr, since a parameter
661     type change. Any compiler should cause an error without any changes in
662     yours netconn_peer calls (so, it can't be a "silent change"). It also
663     reduce a little bit the footprint for socket layer (lwip_getpeername &
664     lwip_getsockname use now a common lwip_getaddrname function since 
665     netconn_peer & netconn_addr have the same parameters).
666
667   2007-09-20 Simon Goldschmidt
668   * tcp.c: Fixed bug #21080 (tcp_bind without check pcbs in TIME_WAIT state)
669     by checking  tcp_tw_pcbs also
670
671   2007-09-19 Simon Goldschmidt
672   * icmp.c: Fixed bug #21107 (didn't reset IP TTL in ICMP echo replies)
673
674   2007-09-15 Mike Kleshov
675   * mem.c: Fixed bug #21077 (inaccuracy in calculation of lwip_stat.mem.used)
676
677   2007-09-06 Frédéric Bernon
678   * several-files: replace some #include "arch/cc.h" by "lwip/arch.h", or simply remove
679     it as long as "lwip/opt.h" is included before (this one include "lwip/debug.h" which
680     already include "lwip/arch.h"). Like that, default defines are provided by "lwip/arch.h"
681     if they are not defined in cc.h, in the same spirit than "lwip/opt.h" for lwipopts.h.
682
683   2007-08-30 Frédéric Bernon
684   * igmp.h, igmp.c: Some changes to remove some redundant code, add some traces, 
685     and fix some coding style.
686
687   2007-08-28 Frédéric Bernon
688   * tcpip.c: Fix TCPIP_MSG_INPKT processing: now, tcpip_input can be used for any
689     kind of packets. These packets are considered like Ethernet packets (payload 
690     pointing to ethhdr) if the netif got the NETIF_FLAG_ETHARP flag. Else, packets 
691     are considered like IP packets (payload pointing to iphdr).
692
693   2007-08-27 Frédéric Bernon
694   * api.h, api_lib.c, api_msg.c: First fix for "bug #20900 : Potential crash error
695     problem with netconn_peer & netconn_addr". Introduce NETCONN_LISTEN netconn_state
696     and remove obsolete ones (NETCONN_RECV & NETCONN_ACCEPT).
697
698   2007-08-24 Kieran Mansley
699   * inet.c Modify (acc >> 16) test to ((acc >> 16) != 0) to help buggy
700     compiler (Paradigm C++)
701
702   2007-08-09 Frédéric Bernon, Bill Florac
703   * stats.h, stats.c, igmp.h, igmp.c, opt.h: Fix for bug #20503 : IGMP Improvement.
704     Introduce IGMP_STATS to centralize statistics management.
705
706   2007-08-09 Frédéric Bernon, Bill Florac
707   * udp.c: Fix for bug #20503 : IGMP Improvement. Enable to receive a multicast
708     packet on a udp pcb binded on an netif's IP address, and not on "any".
709
710   2007-08-09 Frédéric Bernon, Bill Florac
711   * igmp.h, igmp.c, ip.c: Fix minor changes from bug #20503 : IGMP Improvement.
712     This is mainly on using lookup/lookfor, and some coding styles...
713
714   2007-07-26 Frédéric Bernon (and "thedoctor")
715   * igmp.c: Fix bug #20595 to accept IGMPv3 "Query" messages.
716
717   2007-07-25 Simon Goldschmidt
718   * api_msg.c, tcp.c: Another fix for bug #20021: by not returning an error if
719     tcp_output fails in tcp_close, the code in do_close_internal gets simpler
720     (tcp_output is called again later from tcp timers).
721
722   2007-07-25 Simon Goldschmidt
723   * ip_frag.c: Fixed bug #20429: use the new pbuf_copy_partial instead of the old
724     copy_from_pbuf, which illegally modified the given pbuf.
725
726   2007-07-25 Simon Goldschmidt
727   * tcp_out.c: tcp_enqueue: pcb->snd_queuelen didn't work for chaine PBUF_RAMs:
728     changed snd_queuelen++ to snd_queuelen += pbuf_clen(p).
729
730   2007-07-24 Simon Goldschmidt
731   * api_msg.c, tcp.c: Fix bug #20480: Check the pcb passed to tcp_listen() for the
732     correct state (must be CLOSED).
733
734   2007-07-13 Thomas Taranowski (commited by Jared Grubb)
735   * memp.c: Fix bug #20478: memp_malloc returned NULL+MEMP_SIZE on failed
736     allocation. It now returns NULL.
737
738   2007-07-13 Frédéric Bernon
739   * api_msg.c: Fix bug #20318: api_msg "recv" callbacks don't call pbuf_free in
740     all error cases.
741
742   2007-07-13 Frédéric Bernon
743   * api_msg.c: Fix bug #20315: possible memory leak problem if tcp_listen failed,
744     because current code doesn't follow rawapi.txt documentation.
745
746   2007-07-13 Kieran Mansley
747   * src/core/tcp_in.c Apply patch#5741 from Oleg Tyshev to fix bug in
748     out of sequence processing of received packets
749
750   2007-07-03 Simon Goldschmidt
751   * nearly-all-files: Added assertions where PBUF_RAM pbufs are used and an
752     assumption is made that this pbuf is in one piece (i.e. not chained). These
753     assumptions clash with the possibility of converting to fully pool-based
754     pbuf implementations, where PBUF_RAM pbufs might be chained.
755
756   2007-07-03 Simon Goldschmidt
757   * api.h, api_lib.c, api_msg.c: Final fix for bug #20021 and some other problems
758     when closing tcp netconns: removed conn->sem, less context switches when
759     closing, both netconn_close and netconn_delete should safely close tcp
760     connections.
761
762   2007-07-02 Simon Goldschmidt
763   * ipv4/ip.h, ipv6/ip.h, opt.h, netif.h, etharp.h, ipv4/ip.c, netif.c, raw.c,
764     tcp_out.c, udp.c, etharp.c: Added option LWIP_NETIF_HWADDRHINT (default=off)
765     to cache ARP table indices with each pcb instead of single-entry cache for
766     the complete stack.
767
768   2007-07-02 Simon Goldschmidt
769   * tcp.h, tcp.c, tcp_in.c, tcp_out.c: Added some ASSERTS and casts to prevent
770     warnings when assigning to smaller types.
771
772   2007-06-28 Simon Goldschmidt
773   * tcp_out.c: Added check to prevent tcp_pcb->snd_queuelen from overflowing.
774
775   2007-06-28 Simon Goldschmidt
776   * tcp.h: Fixed bug #20287: Fixed nagle algorithm (sending was done too early if
777     a segment contained chained pbufs)
778
779   2007-06-28 Frédéric Bernon
780   * autoip.c: replace most of rand() calls by a macro LWIP_AUTOIP_RAND which compute
781     a "pseudo-random" value based on netif's MAC and some autoip fields. It's always
782     possible to define this macro in your own lwipopts.h to always use C library's
783     rand(). Note that autoip_create_rand_addr doesn't use this macro.
784
785   2007-06-28 Frédéric Bernon
786   * netifapi.h, netifapi.c, tcpip.h, tcpip.c: Update code to handle the option
787     LWIP_TCPIP_CORE_LOCKING, and do some changes to be coherent with last modifications
788     in api_lib/api_msg (use pointers and not type with table, etc...) 
789
790   2007-06-26 Simon Goldschmidt
791   * udp.h: Fixed bug #20259: struct udp_hdr was lacking the packin defines.
792
793   2007-06-25 Simon Goldschmidt
794   * udp.c: Fixed bug #20253: icmp_dest_unreach was called with a wrong p->payload
795     for udp packets with no matching pcb.
796
797   2007-06-25 Simon Goldschmidt
798   * udp.c: Fixed bug #20220: UDP PCB search in udp_input(): a non-local match
799     could get udp input packets if the remote side matched.
800
801   2007-06-13 Simon Goldschmidt
802   * netif.c: Fixed bug #20180 (TCP pcbs listening on IP_ADDR_ANY could get
803     changed in netif_set_ipaddr if previous netif->ip_addr.addr was 0.
804
805   2007-06-13 Simon Goldschmidt
806   * api_msg.c: pcb_new sets conn->err if protocol is not implemented
807     -> netconn_new_..() does not allocate a new connection for unsupported
808     protocols.
809
810   2007-06-13 Frédéric Bernon, Simon Goldschmidt
811   * api_lib.c: change return expression in netconn_addr and netconn_peer, because
812     conn->err was reset to ERR_OK without any reasons (and error was lost)...
813
814   2007-06-13 Frédéric Bernon, Matthias Weisser
815   * opt.h, mem.h, mem.c, memp.c, pbuf.c, ip_frag.c, vj.c: Fix bug #20162. Rename
816     MEM_ALIGN in LWIP_MEM_ALIGN and MEM_ALIGN_SIZE in LWIP_MEM_ALIGN_SIZE to avoid
817     some macro names collision with some OS macros.
818
819   2007-06-11 Simon Goldschmidt
820   * udp.c: UDP Lite: corrected the use of chksum_len (based on RFC3828: if it's 0,
821     create checksum over the complete packet. On RX, if it's < 8 (and not 0),
822     discard the packet. Also removed the duplicate 'udphdr->chksum = 0' for both
823     UDP & UDP Lite.
824
825   2007-06-11 Srinivas Gollakota & Oleg Tyshev
826   * tcp_out.c: Fix for bug #20075 : "A problem with keep-alive timer and TCP flags"
827     where TCP flags wasn't initialized in tcp_keepalive.
828
829   2007-06-03 Simon Goldschmidt
830   * udp.c: udp_input(): Input pbuf was not freed if pcb had no recv function
831     registered, p->payload was modified without modifying p->len if sending
832     icmp_dest_unreach() (had no negative effect but was definitively wrong).
833
834   2007-06-03 Simon Goldschmidt
835   * icmp.c: Corrected bug #19937: For responding to an icmp echo request, icmp
836     re-used the input pbuf even if that didn't have enough space to include the
837     link headers. Now the space is tested and a new pbuf is allocated for the
838     echo response packet if the echo request pbuf isn't big enough.
839
840   2007-06-01 Simon Goldschmidt
841   * sockets.c: Checked in patch #5914: Moved sockopt processing into tcpip_thread.
842
843   2007-05-23 Frédéric Bernon
844   * api_lib.c, sockets.c: Fixed bug #5958 for netconn_listen (acceptmbox only
845     allocated by do_listen if success) and netconn_accept errors handling. In
846     most of api_lib functions, we replace some errors checkings like "if (conn==NULL)"
847     by ASSERT, except for netconn_delete.
848
849   2007-05-23 Frédéric Bernon
850   * api_lib.c: Fixed bug #5957 "Safe-thread problem inside netconn_recv" to return
851     an error code if it's impossible to fetch a pbuf on a TCP connection (and not
852     directly close the recvmbox).
853
854   2007-05-22 Simon Goldschmidt
855   * tcp.c: Fixed bug #1895 (tcp_bind not correct) by introducing a list of
856     bound but unconnected (and non-listening) tcp_pcbs.
857
858   2007-05-22 Frédéric Bernon
859   * sys.h, sys.c, api_lib.c, tcpip.c: remove sys_mbox_fetch_timeout() (was only
860     used for LWIP_SO_RCVTIMEO option) and use sys_arch_mbox_fetch() instead of
861     sys_mbox_fetch() in api files. Now, users SHOULD NOT use internal lwIP features
862     like "sys_timeout" in their application threads.
863
864   2007-05-22 Frédéric Bernon
865   * api.h, api_lib.c, api_msg.h, api_msg.c: change the struct api_msg_msg to see
866     which parameters are used by which do_xxx function, and to avoid "misusing"
867     parameters (patch #5938).
868
869   2007-05-22 Simon Goldschmidt
870   * api_lib.c, api_msg.c, raw.c, api.h, api_msg.h, raw.h: Included patch #5938:
871     changed raw_pcb.protocol from u16_t to u8_t since for IPv4 and IPv6, proto
872     is only 8 bits wide. This affects the api, as there, the protocol was
873     u16_t, too.
874
875   2007-05-18 Simon Goldschmidt
876   * memp.c: addition to patch #5913: smaller pointer was returned but
877     memp_memory was the same size -> did not save memory.
878
879   2007-05-16 Simon Goldschmidt
880   * loopif.c, slipif.c: Fix bug #19729: free pbuf if netif->input() returns
881     != ERR_OK.
882
883   2007-05-16 Simon Goldschmidt
884   * api_msg.c, udp.c: If a udp_pcb has a local_ip set, check if it is the same
885     as the one of the netif used for sending to prevent sending from old
886     addresses after a netif address gets changed (partly fixes bug #3168).
887
888   2007-05-16 Frédéric Bernon
889   * tcpip.c, igmp.h, igmp.c: Fixed bug "#19800 : IGMP: igmp_tick() will not work
890     with NO_SYS=1". Note that igmp_init is always in tcpip_thread (and not in 
891     tcpip_init) because we have to be sure that network interfaces are already
892     added (mac filter is updated only in igmp_init for the moment).
893
894   2007-05-16 Simon Goldschmidt
895   * mem.c, memp.c: Removed semaphores from memp, changed sys_sem_wait calls
896     into sys_arch_sem_wait calls to prevent timers from running while waiting
897     for the heap. This fixes bug #19167.
898
899   2007-05-13 Simon Goldschmidt
900   * tcp.h, sockets.h, sockets.c: Fixed bug from patch #5865 by moving the defines
901     for socket options (lwip_set/-getsockopt) used with level IPPROTO_TCP from
902     tcp.h to sockets.h.
903
904   2007-05-07 Simon Goldschmidt
905   * mem.c: Another attempt to fix bug #17922.
906
907   2007-05-04 Simon Goldschmidt
908   * pbuf.c, pbuf.h, etharp.c: Further update to ARP queueing: Changed pbuf_copy()
909     implementation so that it can be reused (don't allocate the target
910     pbuf inside pbuf_copy()).
911
912   2007-05-04 Simon Goldschmidt
913   * memp.c: checked in patch #5913: in memp_malloc() we can return memp as mem
914     to save a little RAM (next pointer of memp is not used while not in pool).
915
916   2007-05-03 "maq"
917   * sockets.c: Fix ioctl FIONREAD when some data remains from last recv.
918     (patch #3574).
919
920   2007-04-23 Simon Goldschmidt
921   * loopif.c, loopif.h, opt.h, src/netif/FILES: fix bug #2595: "loopif results
922     in NULL reference for incoming TCP packets". Loopif has to be configured
923     (using LWIP_LOOPIF_MULTITHREADING) to directly call netif->input()
924     (multithreading environments, e.g. netif->input() = tcpip_input()) or
925     putting packets on a list that is fed to the stack by calling loopif_poll()
926     (single-thread / NO_SYS / polling environment where e.g.
927     netif->input() = ip_input).
928
929   2007-04-17 Jonathan Larmour
930   * pbuf.c: Use s32_t in pbuf_realloc(), as an s16_t can't reliably hold
931     the difference between two u16_t's.
932   * sockets.h: FD_SETSIZE needs to match number of sockets, which is
933     MEMP_NUM_NETCONN in sockets.c right now.
934
935   2007-04-12 Jonathan Larmour
936   * icmp.c: Reset IP header TTL in ICMP ECHO responses (bug #19580).
937
938   2007-04-12 Kieran Mansley
939   * tcp.c, tcp_in.c, tcp_out.c, tcp.h: Modify way the retransmission
940     timer is reset to fix bug#19434, with help from Oleg Tyshev.
941
942   2007-04-11 Simon Goldschmidt
943   * etharp.c, pbuf.c, pbuf.h: 3rd fix for bug #11400 (arp-queuing): More pbufs than
944     previously thought need to be copied (everything but PBUF_ROM!). Cleaned up
945     pbuf.c: removed functions no needed any more (by etharp).
946
947   2007-04-11 Kieran Mansley
948   * inet.c, ip_addr.h, sockets.h, sys.h, tcp.h: Apply patch #5745: Fix
949     "Constant is long" warnings with 16bit compilers.  Contributed by
950     avatar@mmlab.cse.yzu.edu.tw
951
952   2007-04-05 Frédéric Bernon, Jonathan Larmour
953   * api_msg.c: Fix bug #16830: "err_tcp() posts to connection mailbox when no pend on
954     the mailbox is active". Now, the post is only done during a connect, and do_send,
955     do_write and do_join_leave_group don't do anything if a previous error was signaled.
956
957   2007-04-03 Frédéric Bernon
958   * ip.c: Don't set the IP_DF ("Don't fragment") flag in the IP header in IP output
959     packets. See patch #5834.
960
961   2007-03-30 Frédéric Bernon
962   * api_msg.c: add a "pcb_new" helper function to avoid redundant code, and to add
963     missing  pcb allocations checking (in do_bind, and for each raw_new). Fix style.
964
965   2007-03-30 Frédéric Bernon
966   * most of files: prefix all debug.h define with "LWIP_" to avoid any conflict with
967     others environment defines (these were too "generic").
968
969   2007-03-28 Frédéric Bernon
970   * api.h, api_lib.c, sockets.c: netbuf_ref doesn't check its internal pbuf_alloc call
971     result and can cause a crash. lwip_send now check netbuf_ref result.
972
973   2007-03-28 Simon Goldschmidt
974   * sockets.c Remove "#include <errno.h>" from sockets.c to avoid multiple
975     definition of macros (in errno.h and lwip/arch.h) if LWIP_PROVIDE_ERRNO is
976     defined. This is the way it should have been already (looking at
977     doc/sys_arch.txt)
978
979   2007-03-28 Kieran Mansley
980   * opt.h Change default PBUF_POOL_BUFSIZE (again) to accomodate default MSS +
981     IP and TCP headers *and* physical link headers
982
983   2007-03-26 Frédéric Bernon (based on patch from Dmitry Potapov)
984   * api_lib.c: patch for netconn_write(), fixes a possible race condition which cause
985     to send some garbage. It is not a definitive solution, but the patch does solve
986     the problem for most cases.
987
988   2007-03-22 Frédéric Bernon
989   * api_msg.h, api_msg.c: Remove obsolete API_MSG_ACCEPT and do_accept (never used).
990
991   2007-03-22 Frédéric Bernon
992   * api_lib.c: somes resources couldn't be freed if there was errors during
993     netconn_new_with_proto_and_callback.
994
995   2007-03-22 Frédéric Bernon
996   * ethernetif.c: update netif->input calls to check return value. In older ports,
997     it's a good idea to upgrade them, even if before, there could be another problem
998     (access to an uninitialized mailbox).
999
1000   2007-03-21 Simon Goldschmidt
1001   * sockets.c: fixed bug #5067 (essentialy a signed/unsigned warning fixed
1002     by casting to unsigned).
1003
1004   2007-03-21 Frédéric Bernon
1005   * api_lib.c, api_msg.c, tcpip.c: integrate sys_mbox_fetch(conn->mbox, NULL) calls from
1006     api_lib.c to tcpip.c's tcpip_apimsg(). Now, use a local variable and not a
1007     dynamic one from memp to send tcpip_msg to tcpip_thread in a synchrone call.
1008     Free tcpip_msg from tcpip_apimsg is not done in tcpip_thread. This give a
1009     faster and more reliable communication between api_lib and tcpip.
1010
1011   2007-03-21 Frédéric Bernon
1012   * opt.h: Add LWIP_NETIF_CALLBACK (to avoid compiler warning) and set it to 0.
1013
1014   2007-03-21 Frédéric Bernon
1015   * api_msg.c, igmp.c, igmp.h: Fix C++ style comments
1016
1017   2007-03-21 Kieran Mansley
1018   * opt.h Change default PBUF_POOL_BUFSIZE to accomodate default MSS +
1019     IP and TCP headers
1020
1021   2007-03-21 Kieran Mansley
1022   * Fix all uses of pbuf_header to check the return value.  In some
1023     cases just assert if it fails as I'm not sure how to fix them, but
1024     this is no worse than before when they would carry on regardless
1025     of the failure.
1026
1027   2007-03-21 Kieran Mansley
1028   * sockets.c, igmp.c, igmp.h, memp.h: Fix C++ style comments and
1029     comment out missing header include in icmp.c
1030
1031   2007-03-20 Frédéric Bernon
1032   * memp.h, stats.c: Fix stats_display function where memp_names table wasn't
1033     synchronized with memp.h.
1034
1035   2007-03-20 Frédéric Bernon
1036   * tcpip.c: Initialize tcpip's mbox, and verify if initialized in tcpip_input,
1037     tcpip_ethinput, tcpip_callback, tcpip_apimsg, to fix a init problem with 
1038     network interfaces. Also fix a compiler warning.
1039
1040   2007-03-20 Kieran Mansley
1041   * udp.c: Only try and use pbuf_header() to make space for headers if
1042     not a ROM or REF pbuf.
1043
1044   2007-03-19 Frédéric Bernon
1045   * api_msg.h, api_msg.c, tcpip.h, tcpip.c: Add return types to tcpip_apimsg()
1046     and api_msg_post().
1047
1048   2007-03-19 Frédéric Bernon
1049   * Remove unimplemented "memp_realloc" function from memp.h.
1050
1051   2007-03-11 Simon Goldschmidt
1052   * pbuf.c: checked in patch #5796: pbuf_alloc: len field claculation caused
1053     memory corruption.
1054
1055   2007-03-11 Simon Goldschmidt (based on patch from Dmitry Potapov)
1056   * api_lib.c, sockets.c, api.h, api_msg.h, sockets.h: Fixed bug #19251
1057     (missing `const' qualifier in socket functions), to get more compatible to
1058     standard POSIX sockets.
1059
1060   2007-03-11 Frédéric Bernon (based on patch from Dmitry Potapov)
1061   * sockets.c: Add asserts inside bind, connect and sendto to check input
1062     parameters. Remove excessive set_errno() calls after get_socket(), because
1063     errno is set inside of get_socket(). Move last sock_set_errno() inside
1064     lwip_close.
1065
1066   2007-03-09 Simon Goldschmidt
1067   * memp.c: Fixed bug #11400: New etharp queueing introduced bug: memp_memory
1068     was allocated too small.
1069
1070   2007-03-06 Simon Goldschmidt
1071   * tcpip.c: Initialize dhcp timers in tcpip_thread (if LWIP_DHCP) to protect
1072     the stack from concurrent access.
1073
1074   2007-03-06 Frédéric Bernon, Dmitry Potapov
1075   * tcpip.c, ip_frag.c, ethernetif.c: Fix some build problems, and a redundancy
1076     call to "lwip_stats.link.recv++;" in low_level_input() & ethernetif_input().
1077
1078   2007-03-06 Simon Goldschmidt
1079   * ip_frag.c, ip_frag.h: Reduce code size: don't include code in those files
1080     if IP_FRAG == 0 and IP_REASSEMBLY == 0
1081
1082   2007-03-06 Frédéric Bernon, Simon Goldschmidt
1083   * opt.h, ip_frag.h, tcpip.h, tcpip.c, ethernetif.c: add new configuration
1084     option named ETHARP_TCPIP_ETHINPUT, which enable the new tcpip_ethinput.
1085     Allow to do ARP processing for incoming packets inside tcpip_thread
1086     (protecting ARP layer against concurrent access). You can also disable
1087     old code using tcp_input with new define ETHARP_TCPIP_INPUT set to 0.
1088     Older ports have to use tcpip_ethinput.
1089
1090   2007-03-06 Simon Goldschmidt (based on patch from Dmitry Potapov)
1091   * err.h, err.c: fixed compiler warning "initialization dircards qualifiers
1092     from pointer target type"
1093
1094   2007-03-05 Frédéric Bernon
1095   * opt.h, sockets.h: add new configuration options (LWIP_POSIX_SOCKETS_IO_NAMES,
1096     ETHARP_TRUST_IP_MAC, review SO_REUSE)
1097
1098   2007-03-04 Frédéric Bernon
1099   * api_msg.c: Remove some compiler warnings : parameter "pcb" was never
1100     referenced.
1101
1102   2007-03-04 Frédéric Bernon
1103   * api_lib.c: Fix "[patch #5764] api_lib.c cleanup: after patch #5687" (from
1104     Dmitry Potapov).
1105     The api_msg struct stay on the stack (not moved to netconn struct).
1106
1107   2007-03-04 Simon Goldschmidt (based on patch from Dmitry Potapov)
1108   * pbuf.c: Fix BUG#19168 - pbuf_free can cause deadlock (if
1109     SYS_LIGHTWEIGHT_PROT=1 & freeing PBUF_RAM when mem_sem is not available)
1110     Also fixed cast warning in pbuf_alloc()
1111
1112   2007-03-04 Simon Goldschmidt
1113   * etharp.c, etharp.h, memp.c, memp.h, opt.h: Fix BUG#11400 - don't corrupt
1114     existing pbuf chain when enqueuing multiple pbufs to a pending ARP request
1115
1116   2007-03-03 Frédéric Bernon
1117   * udp.c: remove obsolete line "static struct udp_pcb *pcb_cache = NULL;"
1118     It is static, and never used in udp.c except udp_init().
1119
1120   2007-03-02 Simon Goldschmidt
1121   * tcpip.c: Moved call to ip_init(), udp_init() and tcp_init() from
1122     tcpip_thread() to tcpip_init(). This way, raw API connections can be
1123     initialized before tcpip_thread is running (e.g. before OS is started)
1124
1125   2007-03-02 Frédéric Bernon
1126   * rawapi.txt: Fix documentation mismatch with etharp.h about etharp_tmr's call
1127     interval.
1128
1129   2007-02-28 Kieran Mansley 
1130   * pbuf.c: Fix BUG#17645 - ensure pbuf payload pointer is not moved
1131     outside the region of the pbuf by pbuf_header()
1132
1133   2007-02-28 Kieran Mansley 
1134   * sockets.c: Fix BUG#19161 - ensure milliseconds timeout is non-zero
1135     when supplied timeout is also non-zero 
1136
1137 (STABLE-1.2.0)
1138
1139   2006-12-05 Leon Woestenberg
1140   * CHANGELOG: Mention STABLE-1.2.0 release.
1141
1142   ++ New features:
1143
1144   2006-12-01 Christiaan Simons
1145   * mem.h, opt.h: Added MEM_LIBC_MALLOC option.
1146     Note this is a workaround. Currently I have no other options left.
1147
1148   2006-10-26 Christiaan Simons (accepted patch by Jonathan Larmour)
1149   * ipv4/ip_frag.c: rename MAX_MTU to IP_FRAG_MAX_MTU and move define
1150     to include/lwip/opt.h.
1151   * ipv4/lwip/ip_frag.h: Remove unused IP_REASS_INTERVAL.
1152     Move IP_REASS_MAXAGE and IP_REASS_BUFSIZE to include/lwip/opt.h.
1153   * opt.h: Add above new options.
1154
1155   2006-08-18 Christiaan Simons
1156   * tcp_{in,out}.c: added SNMP counters.
1157   * ipv4/ip.c: added SNMP counters.
1158   * ipv4/ip_frag.c: added SNMP counters.
1159
1160   2006-08-08 Christiaan Simons
1161   * etharp.{c,h}: added etharp_find_addr() to read
1162     (stable) ethernet/IP address pair from ARP table
1163
1164   2006-07-14 Christiaan Simons
1165   * mib_structs.c: added
1166   * include/lwip/snmp_structs.h: added
1167   * netif.{c,h}, netif/ethernetif.c: added SNMP statistics to netif struct
1168
1169   2006-07-06 Christiaan Simons
1170   * snmp/asn1_{enc,dec}.c added
1171   * snmp/mib2.c added
1172   * snmp/msg_{in,out}.c added
1173   * include/lwip/snmp_asn1.h added
1174   * include/lwip/snmp_msg.h added
1175   * doc/snmp_agent.txt added
1176
1177   2006-03-29 Christiaan Simons
1178   * inet.c, inet.h: Added platform byteswap support.
1179     Added LWIP_PLATFORM_BYTESWAP define (defaults to 0) and
1180     optional LWIP_PLATFORM_HTONS(), LWIP_PLATFORM_HTONL() macros.
1181
1182   ++ Bug fixes:
1183
1184   2006-11-30 Christiaan Simons
1185   * dhcp.c: Fixed false triggers of request_timeout.
1186
1187   2006-11-28 Christiaan Simons
1188   * netif.c: In netif_add() fixed missing clear of ip_addr, netmask, gw and flags.
1189
1190   2006-10-11 Christiaan Simons
1191   * api_lib.c etharp.c, ip.c, memp.c, stats.c, sys.{c,h} tcp.h:
1192     Partially accepted patch #5449 for ANSI C compatibility / build fixes.
1193   * ipv4/lwip/ip.h ipv6/lwip/ip.h: Corrected UDP-Lite protocol
1194     identifier from 170 to 136 (bug #17574).
1195
1196   2006-10-10 Christiaan Simons
1197   * api_msg.c: Fixed Nagle algorithm as reported by Bob Grice.
1198
1199   2006-08-17 Christiaan Simons
1200   * udp.c: Fixed bug #17200, added check for broadcast
1201     destinations for PCBs bound to a unicast address.
1202
1203   2006-08-07 Christiaan Simons
1204   * api_msg.c: Flushing TCP output in do_close() (bug #15926).
1205
1206   2006-06-27 Christiaan Simons
1207   * api_msg.c: Applied patch for cold case (bug #11135).
1208     In accept_function() ensure newconn->callback is always initialized.
1209
1210   2006-06-15 Christiaan Simons
1211   * mem.h: added MEM_SIZE_F alias to fix an ancient cold case (bug #1748),
1212     facilitate printing of mem_size_t and u16_t statistics.
1213
1214   2006-06-14 Christiaan Simons
1215   * api_msg.c: Applied patch #5146 to handle allocation failures
1216     in accept() by Kevin Lawson.
1217
1218   2006-05-26 Christiaan Simons
1219   * api_lib.c: Removed conn->sem creation and destruction 
1220     from netconn_write() and added sys_sem_new to netconn_new_*.
1221
1222 (STABLE-1_1_1)
1223
1224   2006-03-03  Christiaan Simons
1225   * ipv4/ip_frag.c: Added bound-checking assertions on ip_reassbitmap
1226     access and added pbuf_alloc() return value checks.
1227
1228   2006-01-01  Leon Woestenberg <leon.woestenberg@gmx.net>
1229   * tcp_{in,out}.c, tcp_out.c: Removed 'even sndbuf' fix in TCP, which is
1230     now handled by the checksum routine properly.
1231
1232   2006-02-27  Leon Woestenberg <leon.woestenberg@gmx.net>
1233    * pbuf.c: Fix alignment; pbuf_init() would not work unless
1234      pbuf_pool_memory[] was properly aligned. (Patch by Curt McDowell.)
1235
1236   2005-12-20  Leon Woestenberg <leon.woestenberg@gmx.net>
1237   * tcp.c: Remove PCBs which stay in LAST_ACK state too long. Patch
1238     submitted by Mitrani Hiroshi.
1239
1240   2005-12-15  Christiaan Simons
1241   * inet.c: Disabled the added summing routine to preserve code space.
1242
1243   2005-12-14  Leon Woestenberg <leon.woestenberg@gmx.net>
1244   * tcp_in.c: Duplicate FIN ACK race condition fix by Kelvin Lawson.
1245     Added Curt McDowell's optimized checksumming routine for future
1246     inclusion. Need to create test case for unaliged, aligned, odd,
1247     even length combination of cases on various endianess machines.
1248
1249   2005-12-09  Christiaan Simons
1250   * inet.c: Rewrote standard checksum routine in proper portable C.
1251
1252   2005-11-25  Christiaan Simons
1253   * udp.c tcp.c: Removed SO_REUSE hack. Should reside in socket code only.
1254   * *.c: introduced cc.h LWIP_DEBUG formatters matching the u16_t, s16_t,
1255     u32_t, s32_t typedefs. This solves most debug word-length assumes.
1256
1257   2005-07-17 Leon Woestenberg <leon.woestenberg@gmx.net>
1258   * inet.c: Fixed unaligned 16-bit access in the standard checksum
1259     routine by Peter Jolasson.
1260   * slipif.c: Fixed implementation assumption of single-pbuf datagrams.
1261
1262   2005-02-04 Leon Woestenberg <leon.woestenberg@gmx.net>
1263   * tcp_out.c: Fixed uninitialized 'queue' referenced in memerr branch.
1264   * tcp_{out|in}.c: Applied patch fixing unaligned access.
1265
1266   2005-01-04 Leon Woestenberg <leon.woestenberg@gmx.net>
1267   * pbuf.c: Fixed missing semicolon after LWIP_DEBUG statement.
1268
1269   2005-01-03 Leon Woestenberg <leon.woestenberg@gmx.net>
1270   * udp.c: UDP pcb->recv() was called even when it was NULL.
1271
1272 (STABLE-1_1_0)
1273
1274   2004-12-28 Leon Woestenberg <leon.woestenberg@gmx.net>
1275   * etharp.*: Disabled multiple packets on the ARP queue.
1276     This clashes with TCP queueing.
1277
1278   2004-11-28 Leon Woestenberg <leon.woestenberg@gmx.net>
1279   * etharp.*: Fixed race condition from ARP request to ARP timeout.
1280     Halved the ARP period, doubled the period counts.
1281     ETHARP_MAX_PENDING now should be at least 2. This prevents
1282     the counter from reaching 0 right away (which would allow
1283     too little time for ARP responses to be received).
1284
1285   2004-11-25 Leon Woestenberg <leon.woestenberg@gmx.net>
1286   * dhcp.c: Decline messages were not multicast but unicast.
1287   * etharp.c: ETHARP_CREATE is renamed to ETHARP_TRY_HARD.
1288     Do not try hard to insert arbitrary packet's source address,
1289     etharp_ip_input() now calls etharp_update() without ETHARP_TRY_HARD. 
1290     etharp_query() now always DOES call ETHARP_TRY_HARD so that users
1291     querying an address will see it appear in the cache (DHCP could
1292     suffer from this when a server invalidly gave an in-use address.)
1293   * ipv4/ip_addr.h: Renamed ip_addr_maskcmp() to _netcmp() as we are
1294     comparing network addresses (identifiers), not the network masks
1295     themselves.
1296   * ipv4/ip_addr.c: ip_addr_isbroadcast() now checks that the given
1297     IP address actually belongs to the network of the given interface.
1298
1299   2004-11-24 Kieran Mansley <kjm25@cam.ac.uk>
1300   * tcp.c: Increment pcb->snd_buf when ACK is received in SYN_SENT state.
1301
1302 (STABLE-1_1_0-RC1)
1303
1304   2004-10-16 Kieran Mansley <kjm25@cam.ac.uk>
1305   * tcp.c: Add code to tcp_recved() to send an ACK (window update) immediately,
1306     even if one is already pending, if the rcv_wnd is above a threshold
1307     (currently TCP_WND/2). This avoids waiting for a timer to expire to send a
1308     delayed ACK in order to open the window if the stack is only receiving data.
1309
1310   2004-09-12 Kieran Mansley <kjm25@cam.ac.uk>
1311   * tcp*.*: Retransmit time-out handling improvement by Sam Jansen.
1312
1313   2004-08-20 Tony Mountifield <tony@softins.co.uk>
1314   * etharp.c: Make sure the first pbuf queued on an ARP entry
1315     is properly ref counted.
1316
1317   2004-07-27 Tony Mountifield <tony@softins.co.uk>
1318   * debug.h: Added (int) cast in LWIP_DEBUGF() to avoid compiler
1319     warnings about comparison.
1320   * pbuf.c: Stopped compiler complaining of empty if statement
1321     when LWIP_DEBUGF() empty.  Closed an unclosed comment.
1322   * tcp.c: Stopped compiler complaining of empty if statement
1323     when LWIP_DEBUGF() empty.
1324   * ip.h Corrected IPH_TOS() macro: returns a byte, so doesn't need htons().
1325   * inet.c: Added a couple of casts to quiet the compiler.
1326     No need to test isascii(c) before isdigit(c) or isxdigit(c).
1327
1328   2004-07-22 Tony Mountifield <tony@softins.co.uk>
1329   * inet.c: Made data types consistent in inet_ntoa().
1330     Added casts for return values of checksum routines, to pacify compiler.
1331   * ip_frag.c, tcp_out.c, sockets.c, pbuf.c
1332     Small corrections to some debugging statements, to pacify compiler.
1333
1334   2004-07-21 Tony Mountifield <tony@softins.co.uk>
1335   * etharp.c: Removed spurious semicolon and added missing end-of-comment.
1336   * ethernetif.c Updated low_level_output() to match prototype for
1337     netif->linkoutput and changed low_level_input() similarly for consistency.
1338   * api_msg.c: Changed recv_raw() from int to u8_t, to match prototype
1339     of raw_recv() in raw.h and so avoid compiler error.
1340   * sockets.c: Added trivial (int) cast to keep compiler happier.
1341   * ip.c, netif.c Changed debug statements to use the tidier ip4_addrN() macros.
1342
1343 (STABLE-1_0_0)
1344
1345   ++ Changes:
1346
1347   2004-07-05 Leon Woestenberg <leon.woestenberg@gmx.net>
1348   * sockets.*: Restructured LWIP_PRIVATE_TIMEVAL. Make sure
1349     your cc.h file defines this either 1 or 0. If non-defined,
1350     defaults to 1.
1351   * .c: Added <string.h> and <errno.h> includes where used.
1352   * etharp.c: Made some array indices unsigned.
1353
1354   2004-06-27 Leon Woestenberg <leon.woestenberg@gmx.net>
1355   * netif.*: Added netif_set_up()/down().
1356   * dhcp.c: Changes to restart program flow.
1357
1358   2004-05-07 Leon Woestenberg <leon.woestenberg@gmx.net>
1359   * etharp.c: In find_entry(), instead of a list traversal per candidate, do a
1360     single-pass lookup for different candidates. Should exploit locality.
1361
1362   2004-04-29 Leon Woestenberg <leon.woestenberg@gmx.net>
1363   * tcp*.c: Cleaned up source comment documentation for Doxygen processing.
1364   * opt.h: ETHARP_ALWAYS_INSERT option removed to comply with ARP RFC.
1365   * etharp.c: update_arp_entry() only adds new ARP entries when adviced to by
1366     the caller. This deprecates the ETHARP_ALWAYS_INSERT overrule option.
1367
1368   ++ Bug fixes:
1369
1370   2004-04-27 Leon Woestenberg <leon.woestenberg@gmx.net>
1371   * etharp.c: Applied patch of bug #8708 by Toni Mountifield with a solution
1372     suggested by Timmy Brolin. Fix for 32-bit processors that cannot access
1373     non-aligned 32-bit words, such as soms 32-bit TCP/IP header fields. Fix
1374     is to prefix the 14-bit Ethernet headers with two padding bytes.
1375
1376   2004-04-23 Leon Woestenberg <leon.woestenberg@gmx.net>
1377   * ip_addr.c: Fix in the ip_addr_isbroadcast() check.
1378   * etharp.c: Fixed the case where the packet that initiates the ARP request
1379     is not queued, and gets lost. Fixed the case where the packets destination
1380     address is already known; we now always queue the packet and perform an ARP
1381     request.
1382
1383 (STABLE-0_7_0)
1384
1385   ++ Bug fixes:
1386
1387   * Fixed TCP bug for SYN_SENT to ESTABLISHED state transition.
1388   * Fixed TCP bug in dequeueing of FIN from out of order segment queue.
1389   * Fixed two possible NULL references in rare cases.
1390
1391 (STABLE-0_6_6)
1392
1393   ++ Bug fixes:
1394
1395   * Fixed DHCP which did not include the IP address in DECLINE messages.
1396
1397   ++ Changes:
1398
1399   * etharp.c has been hauled over a bit.
1400
1401 (STABLE-0_6_5)
1402
1403   ++ Bug fixes:
1404
1405   * Fixed TCP bug induced by bad window resizing with unidirectional TCP traffic.
1406   * Packets sent from ARP queue had invalid source hardware address.
1407
1408   ++ Changes:
1409
1410   * Pass-by ARP requests do now update the cache.
1411
1412   ++ New features:
1413
1414   * No longer dependent on ctype.h.
1415   * New socket options.
1416   * Raw IP pcb support.
1417
1418 (STABLE-0_6_4)
1419
1420   ++ Bug fixes:
1421
1422   * Some debug formatters and casts fixed.
1423   * Numereous fixes in PPP.
1424
1425   ++ Changes:
1426
1427   * DEBUGF now is LWIP_DEBUGF
1428   * pbuf_dechain() has been re-enabled.
1429   * Mentioned the changed use of CVS branches in README.
1430
1431 (STABLE-0_6_3)
1432
1433   ++ Bug fixes:
1434
1435   * Fixed pool pbuf memory leak in pbuf_alloc().
1436     Occured if not enough PBUF_POOL pbufs for a packet pbuf chain.
1437     Reported by Savin Zlobec.
1438
1439   * PBUF_POOL chains had their tot_len field not set for non-first
1440     pbufs. Fixed in pbuf_alloc().
1441
1442   ++ New features:
1443
1444   * Added PPP stack contributed by Marc Boucher
1445
1446   ++ Changes:
1447
1448   * Now drops short packets for ICMP/UDP/TCP protocols. More robust.
1449
1450   * ARP queueuing now queues the latest packet instead of the first.
1451     This is the RFC recommended behaviour, but can be overridden in
1452     lwipopts.h.
1453
1454 (0.6.2)
1455
1456   ++ Bugfixes:
1457
1458   * TCP has been fixed to deal with the new use of the pbuf->ref
1459     counter.
1460
1461   * DHCP dhcp_inform() crash bug fixed.
1462
1463   ++ Changes:
1464
1465   * Removed pbuf_pool_free_cache and pbuf_pool_alloc_cache. Also removed
1466     pbuf_refresh(). This has sped up pbuf pool operations considerably.
1467     Implemented by David Haas.
1468
1469 (0.6.1)
1470
1471   ++ New features:
1472
1473   * The packet buffer implementation has been enhanced to support
1474     zero-copy and copy-on-demand for packet buffers which have their
1475     payloads in application-managed memory.
1476     Implemented by David Haas.
1477
1478     Use PBUF_REF to make a pbuf refer to RAM. lwIP will use zero-copy
1479     if an outgoing packet can be directly sent on the link, or perform
1480     a copy-on-demand when necessary.
1481
1482     The application can safely assume the packet is sent, and the RAM
1483     is available to the application directly after calling udp_send()
1484     or similar function.
1485
1486   ++ Bugfixes:
1487
1488   * ARP_QUEUEING should now correctly work for all cases, including
1489     PBUF_REF.
1490     Implemented by Leon Woestenberg.
1491
1492   ++ Changes:
1493
1494   * IP_ADDR_ANY is no longer a NULL pointer. Instead, it is a pointer
1495     to a '0.0.0.0' IP address.
1496
1497   * The packet buffer implementation is changed. The pbuf->ref counter
1498     meaning has changed, and several pbuf functions have been
1499     adapted accordingly.
1500
1501   * netif drivers have to be changed to set the hardware address length field
1502     that must be initialized correctly by the driver (hint: 6 for Ethernet MAC).
1503     See the contrib/ports/c16x cs8900 driver as a driver example.
1504
1505   * netif's have a dhcp field that must be initialized to NULL by the driver.
1506     See the contrib/ports/c16x cs8900 driver as a driver example.
1507
1508 (0.5.x) This file has been unmaintained up to 0.6.1. All changes are
1509   logged in CVS but have not been explained here.
1510
1511 (0.5.3) Changes since version 0.5.2
1512
1513   ++ Bugfixes:
1514
1515   * memp_malloc(MEMP_API_MSG) could fail with multiple application
1516     threads because it wasn't protected by semaphores.
1517
1518   ++ Other changes:
1519
1520   * struct ip_addr now packed.
1521
1522   * The name of the time variable in arp.c has been changed to ctime
1523     to avoid conflicts with the time() function.
1524
1525 (0.5.2) Changes since version 0.5.1
1526
1527   ++ New features:
1528
1529   * A new TCP function, tcp_tmr(), now handles both TCP timers.
1530
1531   ++ Bugfixes:
1532
1533   * A bug in tcp_parseopt() could cause the stack to hang because of a
1534     malformed TCP option.
1535
1536   * The address of new connections in the accept() function in the BSD
1537     socket library was not handled correctly.
1538
1539   * pbuf_dechain() did not update the ->tot_len field of the tail.
1540
1541   * Aborted TCP connections were not handled correctly in all
1542     situations.
1543
1544   ++ Other changes:
1545
1546   * All protocol header structs are now packed.
1547
1548   * The ->len field in the tcp_seg structure now counts the actual
1549     amount of data, and does not add one for SYN and FIN segments.
1550
1551 (0.5.1) Changes since version 0.5.0
1552
1553   ++ New features:
1554
1555   * Possible to run as a user process under Linux.
1556
1557   * Preliminary support for cross platform packed structs.
1558
1559   * ARP timer now implemented.
1560
1561   ++ Bugfixes:
1562
1563   * TCP output queue length was badly initialized when opening
1564     connections.
1565
1566   * TCP delayed ACKs were not sent correctly.
1567
1568   * Explicit initialization of BSS segment variables.
1569
1570   * read() in BSD socket library could drop data.
1571
1572   * Problems with memory alignment.
1573
1574   * Situations when all TCP buffers were used could lead to
1575     starvation.
1576
1577   * TCP MSS option wasn't parsed correctly.
1578
1579   * Problems with UDP checksum calculation.
1580
1581   * IP multicast address tests had endianess problems.
1582
1583   * ARP requests had wrong destination hardware address.
1584
1585   ++ Other changes:
1586
1587   * struct eth_addr changed from u16_t[3] array to u8_t[6].
1588
1589   * A ->linkoutput() member was added to struct netif.
1590
1591   * TCP and UDP ->dest_* struct members where changed to ->remote_*.
1592
1593   * ntoh* macros are now null definitions for big endian CPUs.
1594
1595 (0.5.0) Changes since version 0.4.2
1596
1597   ++ New features:
1598
1599   * Redesigned operating system emulation layer to make porting easier.
1600
1601   * Better control over TCP output buffers.
1602
1603   * Documenation added.
1604
1605   ++ Bugfixes:
1606
1607   * Locking issues in buffer management.
1608
1609   * Bugfixes in the sequential API.
1610
1611   * IP forwarding could cause memory leakage. This has been fixed.
1612
1613   ++ Other changes:
1614
1615   * Directory structure somewhat changed; the core/ tree has been
1616     collapsed.
1617
1618 (0.4.2) Changes since version 0.4.1
1619
1620   ++ New features:
1621
1622   * Experimental ARP implementation added.
1623
1624   * Skeleton Ethernet driver added.
1625
1626   * Experimental BSD socket API library added.
1627
1628   ++ Bugfixes:
1629
1630   * In very intense situations, memory leakage could occur. This has
1631     been fixed.
1632
1633   ++ Other changes:
1634
1635   * Variables named "data" and "code" have been renamed in order to
1636     avoid name conflicts in certain compilers.
1637
1638   * Variable++ have in appliciable cases been translated to ++variable
1639     since some compilers generate better code in the latter case.
1640
1641 (0.4.1) Changes since version 0.4
1642
1643   ++ New features:
1644
1645   * TCP: Connection attempts time out earlier than data
1646     transmissions. Nagle algorithm implemented. Push flag set on the
1647     last segment in a burst.
1648
1649   * UDP: experimental support for UDP-Lite extensions.
1650
1651   ++ Bugfixes:
1652
1653   * TCP: out of order segments were in some cases handled incorrectly,
1654     and this has now been fixed. Delayed acknowledgements was broken
1655     in 0.4, has now been fixed. Binding to an address that is in use
1656     now results in an error. Reset connections sometimes hung an
1657     application; this has been fixed.
1658
1659   * Checksum calculation sometimes failed for chained pbufs with odd
1660     lengths. This has been fixed.
1661
1662   * API: a lot of bug fixes in the API. The UDP API has been improved
1663     and tested. Error reporting and handling has been
1664     improved. Logical flaws and race conditions for incoming TCP
1665     connections has been found and removed.
1666
1667   * Memory manager: alignment issues. Reallocating memory sometimes
1668     failed, this has been fixed.
1669
1670   * Generic library: bcopy was flawed and has been fixed.
1671
1672   ++ Other changes:
1673
1674   * API: all datatypes has been changed from generic ones such as
1675     ints, to specified ones such as u16_t. Functions that return
1676     errors now have the correct type (err_t).
1677
1678   * General: A lot of code cleaned up and debugging code removed. Many
1679     portability issues have been fixed.
1680
1681   * The license was changed; the advertising clause was removed.
1682
1683   * C64 port added.
1684
1685   * Thanks: Huge thanks go to Dagan Galarneau, Horst Garnetzke, Petri
1686     Kosunen, Mikael Caleres, and Frits Wilmink for reporting and
1687     fixing bugs!
1688
1689 (0.4) Changes since version 0.3.1
1690
1691   * Memory management has been radically changed; instead of
1692     allocating memory from a shared heap, memory for objects that are
1693     rapidly allocated and deallocated is now kept in pools. Allocation
1694     and deallocation from those memory pools is very fast. The shared
1695     heap is still present but is used less frequently.
1696
1697   * The memory, memory pool, and packet buffer subsystems now support
1698     4-, 2-, or 1-byte alignment.
1699
1700   * "Out of memory" situations are handled in a more robust way.
1701
1702   * Stack usage has been reduced.
1703
1704   * Easier configuration of lwIP parameters such as memory usage,
1705     TTLs, statistics gathering, etc. All configuration parameters are
1706     now kept in a single header file "lwipopts.h".
1707
1708   * The directory structure has been changed slightly so that all
1709     architecture specific files are kept under the src/arch
1710     hierarchy.
1711
1712   * Error propagation has been improved, both in the protocol modules
1713     and in the API.
1714
1715   * The code for the RTXC architecture has been implemented, tested
1716     and put to use.
1717
1718   * Bugs have been found and corrected in the TCP, UDP, IP, API, and
1719     the Internet checksum modules.
1720
1721   * Bugs related to porting between a 32-bit and a 16-bit architecture
1722     have been found and corrected.
1723
1724   * The license has been changed slightly to conform more with the
1725     original BSD license, including the advertisement clause.
1726
1727 (0.3.1) Changes since version 0.3
1728
1729   * Fix of a fatal bug in the buffer management. Pbufs with allocated
1730     RAM never returned the RAM when the pbuf was deallocated.
1731
1732   * TCP congestion control, window updates and retransmissions did not
1733     work correctly. This has now been fixed.
1734
1735   * Bugfixes in the API.
1736
1737 (0.3) Changes since version 0.2
1738
1739   * New and improved directory structure. All include files are now
1740     kept in a dedicated include/ directory.
1741
1742   * The API now has proper error handling. A new function,
1743     netconn_err(), now returns an error code for the connection in
1744     case of errors.
1745
1746   * Improvements in the memory management subsystem. The system now
1747     keeps a pointer to the lowest free memory block. A new function,
1748     mem_malloc2() tries to allocate memory once, and if it fails tries
1749     to free some memory and retry the allocation.
1750
1751   * Much testing has been done with limited memory
1752     configurations. lwIP now does a better job when overloaded.
1753
1754   * Some bugfixes and improvements to the buffer (pbuf) subsystem.
1755
1756   * Many bugfixes in the TCP code:
1757
1758     - Fixed a bug in tcp_close().
1759
1760     - The TCP receive window was incorrectly closed when out of
1761       sequence segments was received. This has been fixed.
1762
1763     - Connections are now timed-out of the FIN-WAIT-2 state.
1764
1765     - The initial congestion window could in some cases be too
1766       large. This has been fixed.
1767
1768     - The retransmission queue could in some cases be screwed up. This
1769       has been fixed.
1770
1771     - TCP RST flag now handled correctly.
1772
1773     - Out of sequence data was in some cases never delivered to the
1774       application. This has been fixed.
1775
1776     - Retransmitted segments now contain the correct acknowledgment
1777       number and advertised window.
1778
1779     - TCP retransmission timeout backoffs are not correctly computed
1780       (ala BSD). After a number of retransmissions, TCP now gives up
1781       the connection.
1782
1783   * TCP connections now are kept on three lists, one for active
1784     connections, one for listening connections, and one for
1785     connections that are in TIME-WAIT. This greatly speeds up the fast
1786     timeout processing for sending delayed ACKs.
1787
1788   * TCP now provides proper feedback to the application when a
1789     connection has been successfully set up.
1790
1791   * More comments have been added to the code. The code has also been
1792     somewhat cleaned up.
1793
1794 (0.2) Initial public release.