HISTORY

(git master)

  * [Enter new changes just after this line - do not remove this line]
 
  ++ New features:

  2016-12-31: Simon Goldschmidt
  * tcp.h/.c: added function tcp_listen_with_backlog_and_err() to get the error
    reason when listening fails (bug #49861)

  2016-12-14: Jan Breuer:
  * opt.h, ndc.h/.c: add support for RDNSS option (as per RFC 6106)

  2016-12-14: David van Moolenbroek
  * opt.h, nd6.c: Added LWIP_HOOK_ND6_GET_GW()

  2016-12-09: Dirk Ziegelmeier
  * ip6_frag.c: Implemented support for LWIP_NETIF_TX_SINGLE_PBUF

  2016-12-09: Simon Goldschmidt
  * dns.c: added one-shot multicast DNS queries

  2016-11-24: Ambroz Bizjak, David van Moolenbroek
  * tcp_out.c: Optimize passing contiguous nocopy buffers to tcp_write (bug #46290)

  2016-11-16: Dirk Ziegelmeier
  * sockets.c: added support for IPv6 mapped IPv4 addresses

  ++ Bugfixes:

  2016-12-16: Thomas Mueller
  * api_lib.c: fixed race condition in return value of netconn_gethostbyname()
    (and thus also lwip_gethostbyname/_r() and lwip_getaddrinfo())

  2016-12-15: David van Moolenbroek
  * opt.h, tcp: added LWIP_HOOK_TCP_ISN() to implement less predictable initial
    sequence numbers (see contrib/addons/tcp_isn for an example implementation)

  2016-12-05: Dirk Ziegelmeier
  * fixed compiling with IPv4 disabled (IPv6 only case)
  
  2016-11-28: Simon Goldschmidt
  * api_lib.c: fixed bug #49725 (send-timeout: netconn_write() can return
    ERR_OK without all bytes being written)

  2016-11-28: Ambroz Bizjak
  * tcpi_in.c: fixed bug #49717 (window size in received SYN and SYN-ACK
    assumed scaled)

  2016-11-25: Simon Goldschmidt
  * dhcp.c: fixed bug #49676 (Possible endless loop when parsing dhcp options)

  2016-11-23: Dirk Ziegelmeier
  * udp.c: fixed bug #49662: multicast traffic is now only received on a UDP PCB
   (and therefore on a UDP socket/netconn) when the PCB is bound to IP_ADDR_ANY

  2016-11-16: Dirk Ziegelmeier
  * *: Fixed dual-stack behaviour, IPv6 mapped IPv4 support in socket API

  2016-11-14: Joel Cunningham
  * tcp_out.c: fixed bug #49533 (start persist timer when unsent seg can't fit
    in window) 

  2016-11-16: Roberto Barbieri Carrera
  * autoip.c: fixed bug #49610 (sometimes AutoIP fails to reuse the same address)

  2016-11-11: Dirk Ziegelmeier
  * sockets.c: fixed bug #49578 (dropping multicast membership does not work
    with LWIP_SOCKET_OFFSET)
  
(STABLE-2.0.0)

  ++ New features:

  2016-07-27: Simon Goldschmidt
  * opt.h, timeouts.h/.c: added LWIP_TIMERS_CUSTOM to override the default
    implementation of timeouts

  2016-07-xx: Dirk Ziegelmeier
  * Large overhaul of doxygen documentation

  2016-04-05: Simon Goldschmidt
  * timers.h/.c: prepare for overriding current timeout implementation: all
    stack-internal caclic timers are avaliable in the lwip_cyclic_timers array

  2016-03-23: Simon Goldschmidt
  * tcp: call accept-callback with ERR_MEM when allocating a pcb fails on
    passive open to inform the application about this error
    ATTENTION: applications have to handle NULL pcb in accept callback!

  2016-02-22: Ivan Delamer
  * Initial 6LoWPAN support

  2016-02-XX to 2016-03-XX: Dirk Ziegelmeier
  * Cleanup TCPIP thread sync methods in a way that it is possibe to use them
    in arbitrary code that needs things to be done in TCPIP thread. Used to
    decouple netconn, netif, ppp and 6LoWPAN from LWIP core.

  2016-02-XX: Dirk Ziegelmeier
  * Implement dual-stack support in RAW, UDP and TCP. Add new IP address
    type IPADDR_ANY_TYPE for this. Netconn/Socket API: Dual-stack is
    automatically supported when an IPv6 netconn/socket is created.

  2015-12-26: Martin Hentschel and Dirk Ziegelmeier
  * Rewrite SNMP agent. SNMPv2c + MIB compiler.

  2015-11-12: Dirk Ziegelmeier
  * Decouple SNMP stack from lwIP core and move stack to apps/ directory.
    Breaking change: Users have to call snmp_init() now!

  2015-11-12: Dirk Ziegelmeier
  * Implement possibility to declare private memory pools. This is useful to
    decouple some apps from the core (SNMP stack) or make contrib app usage
    simpler (httpserver_raw)

  2015-10-09: Simon Goldschmidt
  * started to move "private" header files containing implementation details to
    "lwip/priv/" include directory to seperate the API from the implementation.

  2015-10-07: Simon Goldschmidt
  * added sntp client as first "supported" application layer protocol implementation
    added 'apps' folder

  2015-09-30: Dirk Ziegelmeier
  * snmp_structs.h, mib_structs.c, mib2.c: snmp: fixed ugly inheritance
    implementation by aggregating the "base class" (struct mib_node) in all
    derived node classes to get more type-safe code

  2015-09-23: Simon Goldschmidt
  * netif.h/.c, nd6.c: task #13729: Convert netif addresses (IPv4 & IPv6) to
    ip_addr_t (so they can be used without conversion/temporary storage)

  2015-09-08: Dirk Ziegelmeier
  * snmp: Separate mib2 counter/table callbacks from snmp agent. This both cleans
    up the code and should allow integration of a 3rd party agent/mib2. Simple
    counters are kept in MIB2_STATS, tree/table change function prototypes moved to
    snmp_mib2.h.

  2015-09-03: Simon Goldschmidt
  * opt.h, dns.h/.c: DNS/IPv6: added support for AAAA records

  2015-09-01: Simon Goldschmidt
  * task #12178: hardware checksum capabilities can be configured per netif
   (use NETIF_SET_CHECKSUM_CTRL() in your netif's init function)

  2015-08-30: Simon Goldschmidt
  * PBUF_REF with "custom" pbufs is now supported for RX pbufs (see pcapif in
    contrib for an example, LWIP_SUPPORT_CUSTOM_PBUF is required)

  2015-08-30: Simon Goldschmidt
  * support IPv4 source based routing: define LWIP_HOOK_IP4_ROUTE_SRC to point
    to a routing function

  2015-08-05: Simon Goldschmidt
  * many files: allow multicast socket options IP_MULTICAST_TTL, IP_MULTICAST_IF
    and IP_MULTICAST_LOOP to be used without IGMP

  2015-04-24: Simon Goldschmidt
  * dhcp.h/c, autoip.h/.c: added functions dhcp/autoip_supplied_address() to
    check for the source of address assignment (replacement for NETIF_FLAG_DHCP)

  2015-04-10: Simon Goldschmidt
  * many files: task #13480: added LWIP_IPV4 define - IPv4 can be disabled,
    leaving an IPv6-only stack

  2015-04-09: Simon Goldschmidt
  * nearly all files: task #12722 (improve IPv4/v6 address handling): renamed
    ip_addr_t to ip4_addr_t, renamed ipX_addr_t to ip_addr_t and added IP
    version; ip_addr_t is used for all generic IP addresses for the API,
    ip(4/6)_addr_t are only used internally or when initializing netifs or when
    calling version-related functions

  2015-03-24: Simon Goldschmidt
  * opt.h, ip4_addr.h, ip4.c, ip6.c: loopif is not required for loopback traffic
    any more but passed through any netif (ENABLE_LOOPBACK has to be enabled)

  2015-03-23: Simon Goldschmidt
  * opt.h, etharp.c: with ETHARP_TABLE_MATCH_NETIF== 1, duplicate (Auto)-IP
    addresses on multiple netifs should now be working correctly (if correctly
    addressed by routing, that is)

  2015-03-23: Simon Goldschmidt
  * etharp.c: Stable etharp entries that are about to expire are now refreshed
    using unicast to prevent unnecessary broadcast. Only if no answer is received
    after 15 seconds, broadcast is used.

  2015-03-06: Philip Gladstone
  * netif.h/.c: patch #8359 (Provide utility function to add an IPv6 address to
    an interface)

  2015-03-05: Simon Goldschmidt
  * netif.c, ip4.c, dhcp.c, autoip.c: fixed bug #37068 (netif up/down handling
    is unclear): correclty separated administrative status of a netif (up/down)
    from 'valid address' status
    ATTENTION: netif_set_up() now always has to be called, even when dhcp/autoip
    is used!

  2015-02-26: patch by TabascoEye
  * netif.c, udp.h/.c: fixed bug #40753 (re-bind UDP pcbs on change of IP address)

  2015-02-22: chrysn, Simon Goldschmidt
  * *.*: Changed nearly all functions taking 'ip(X)_addr_t' pointer to take
    const pointers (changed user callbacks: raw_recv_fn, udp_recv_fn; changed
    port callbacks: netif_output_fn, netif_igmp_mac_filter_fn)

  2015-02-19: Ivan Delamer
  * netif.h, dhcp.c: Removed unused netif flag for DHCP. The preferred way to evaluate
    if DHCP is active is through netif->dhcp field.

  2015-02-19: Ivan Delamer
  * netif.h, slipif.c, ppp.c: Removed unused netif flag for point to point connections

  2015-02-18: Simon Goldschmidt
  * api_lib.c: fixed bug #37958 "netconn API doesn't handle correctly
    connections half-closed by peer"

  2015-02-18: Simon Goldschmidt
  * tcp.c: tcp_alloc() prefers killing CLOSING/LAST_ACK over active connections
    (see bug #39565)

  2015-02-16: Claudius Zingerli, Sergio Caprile
  * opt.h, dhcp.h/.c: patch #8361 "Add support for NTP option in DHCP"

  2015-02-14: Simon Goldschmidt
  * opt.h, snmp*: added support for write-access community and dedicated
    community for sending traps

  2015-02-13: Simon Goldschmidt
  * opt.h, memp.c: added hook LWIP_HOOK_MEMP_AVAILABLE() to get informed when
    a memp pool was empty and an item is now available

  2015-02-13: Simon Goldschmidt
  * opt.h, pbuf.h/.c, etharp.c: Added the option PBUF_LINK_ENCAPSULATION_HLEN to
    allocate additional header space for TX on netifs requiring additional headers

  2015-02-12: chrysn
  * timers.h/.c: introduce sys_timeouts_sleeptime (returns the time left before
    the next timeout is due, for NO_SYS==1)

  2015-02-11: Nick van Ijzendoorn
  * opt.h, sockets.h/c: patch #7702 "Include ability to increase the socket number
    with defined offset"

  2015-02-11: Frederick Baksik
  * opt.h, def.h, others: patch #8423 "arch/perf.h" should be made an optional item

  2015-02-11: Simon Goldschmidt
  * api_msg.c, opt.h: started to implement fullduplex sockets/netconns
    (note that this is highly unstable yet!)

  2015-01-17: Simon Goldschmidt
  * api: allow enabling socket API without (public) netconn API - netconn API is
    still used by sockets, but keeping it private (static) should allow better
    compiler optimizations

  2015-01-16: Simon Goldschmidt
  * tcp_in.c: fixed bug #20506 "Initial congestion window is very small" again
    by implementing the calculation formula from RFC3390

  2014-12-10: Simon Goldschmidt
  * api: added option LWIP_NETCONN_SEM_PER_THREAD to use a semaphore per thread
    instead of using one per netconn and per select call

  2014-12-08: Simon Goldschmidt
  * ip6.h: fixed bug #43778: IPv6 header version not set on 16-bit platform
    (macro IP6H_VTCFL_SET())

  2014-12-08: Simon Goldschmidt
  * icmp.c, ip4.c, pbuf.c, udp.c, pbuf.h: task #11472 Support PBUF_REF for RX
    (IPv6 and IPv4/v6 reassembly might not work yet)

  2014-11-06: Simon Goldschmidt
  * sockets.c/.h, init.c: lwip_socket_init() is not needed any more
    -> compatibility define

  2014-09-16: Simon Goldschmidt
  * dns.c, opt.h: reduced ram usage by parsing DNS responses in place

  2014-09-16: Simon Goldschmidt
  * pbuf.h/.c: added pbuf_take_at() and pbuf_put_at()

  2014-09-15: Simon Goldschmidt
  * dns.c: added source port randomization to make the DNS client more robust
    (see bug #43144)

  2013-09-02: Simon Goldschmidt
  * arch.h and many other files: added optional macros PACK_STRUCT_FLD_8() and
    PACK_STRUCT_FLD_S() to prevent gcc 4 from warning about struct members that
    do not need packing

  2013-08-19: Simon Goldschmidt
  * netif.h: bug #42998: made NETIF_MAX_HWADDR_LEN overridable for some special
    networks

  2013-03-17: Simon Goldschmidt (patch by Ghobad Emadi)
  * opt.h, etharp.c: Added LWIP_HOOK_ETHARP_GET_GW to implement IPv4 routing with
    multiple gateways

  2013-04-20: Fatih Asici
  * opt.h, etharp.h/.c: patch #7993: Added support for transmitting packets
    with VLAN headers via hook function LWIP_HOOK_VLAN_SET and to check them
    via hook function LWIP_HOOK_VLAN_CHECK

  2014-02-20: Simon Goldschmidt (based on patch by Artem Pisarenko)
  * patch #7885: modification of api modules to support FreeRTOS-MPU
    (don't pass stack-pointers to other threads)

  2014-02-05: Simon Goldschmidt (patch by "xtian" and "alex_ab")
  * patch #6537/#7858: TCP window scaling support

  2014-01-17: Jiri Engelthaler
  * icmp, icmp6, opt.h: patch #8027: Completed HW checksuming for IPv4 and
    IPv6 ICMP's

  2012-08-22: Sylvain Rochet
  * New PPP stack for lwIP, developed in ppp-new branch.
    Based from pppd 2.4.5, released 2009-11-17, with huge changes to match
    code size and memory requirements for embedded devices, including:
    - Gluing together the previous low-level PPP code in lwIP to pppd 2.4.5, which
      is more or less what pppd sys-* files are, so that we get something working
      using the unix port.
    - Merged some patchs from lwIP Git repository which add interesting features
      or fix bugs.
    - Merged some patchs from Debian pppd package which add interesting features
      or fix bugs.
    - Ported PPP timeout handling to the lwIP timers system
    - Disabled all the PPP code using filesystem access, replaced in necessary cases
      to configuration variables.
    - Disabled all the PPP code forking processes.
    - Removed IPX support, lwIP does not support IPX.
    - Ported and improved random module from the previous PPP port.
    - Removed samba TDB (file-driven database) usage, because it needs a filesystem.
    - MS-CHAP required a DES implementation, we added the latest PolarSSL DES
      implementation which is under a BSD-ish license.
    - Also switched to PolarSSL MD4,MD5,SHA1 implementations, which are meant to be
      used in embedded devices with reduced memory footprint.
    - Removed PPP configuration file parsing support. 
    - Added macro definition EAP_SUPPORT to make EAP support optional.
    - Added macro definition CHAP_SUPPORT to make CHAP support optional.
    - Added macro definition MSCHAP_SUPPORT to make MSCHAP support optional.
    - Added macro definition PAP_SUPPORT to make PAP support optional.
    - Cleared all Linux syscall calls.
    - Disabled demand support using a macro, so that it can be ported later.
    - Disabled ECP support using a macro, so that it can be ported later.
    - Disabled CCP support using a macro, so that it can be ported later.
    - Disabled CBCP support using a macro, so that it can be ported later.
    - Disabled LQR support using a macro, so that it can be ported later.
    - Print packet debug feature optional, through PRINTPKT_SUPPORT
    - Removed POSIX signal usage.
    - Fully ported PPPoS code from the previous port.
    - Fully ported PPPoE code from the previous port.
    - Fully ported VJ compression protocol code from the previous port.
    - Removed all malloc()/free() use from PPP, replaced by stack usage or PBUF.
    - Disabled PPP server support using a macro, so that it can be ported later.
    - Switched all PPP debug to lwIP debug system.
    - Created PPP Control Block (PPP PCB), removed PPP unit integer everywhere,
      removed all global variables everywhere, did everything necessary for
      the PPP stack to support more than one PPP session (pppd only support
      one session per process).
    - Removed the statically allocated output buffer, now using PBUF.
    - Improved structure size of all PPP modules, deep analyze of code to reduce
      variables size to the bare minimum. Switched all boolean type (char type in
      most architecture) to compiler generated bitfields.
    - Added PPP IPv6 support, glued lwIP IPv6 support to PPP.
    - Now using a persistent netif interface which can then be used in lwIP
      functions requiring a netif.
    - Now initializing PPP in lwip_init() function.
    - Reworked completely the PPP state machine, so that we don't end up in
      anymore in inconsistent state, especially with PPPoE.
    - Improved the way we handle PPP reconnection after disconnect, cleaning
      everything required so that we start the PPP connection again from a
      clean state.
    - Added PPP holdoff support, allow the lwIP user to wait a little bit before
      reconnecting, prevents connection flood, especially when using PPPoL2TP.
    - Added PPPoL2TP LAC support (a.k.a. UDP tunnels), adding a VPN client
      feature to lwIP, L2TP being a widely used tunnel protocol.
    - Switched all used PPP types to lwIP types (u8t, u16t, u32t, ...)
    - Added PPP API "sequential" thread-safe API, based from NETIFAPI.

  2011-07-21: Simon Goldschmidt
  * sockets.c, opt.h: (bug #30185): added LWIP_FIONREAD_LINUXMODE that makes
    ioctl/FIONREAD return the size of the next pending datagram.

  2011-05-25: Simon Goldschmidt
  * again nearly the whole stack, renamed ip.c to ip4.c, ip_addr.c to ip4_addr.c,
    combined ipv4/ipv6 inet_chksum.c, added ip.h, ip_addr.h: Combined IPv4
    and IPv6 code where possible, added defines to access IPv4/IPv6 in non-IP
    code so that the code is more readable.

  2011-05-17: Patch by Ivan Delamer (only checked in by Simon Goldschmidt)
  * nearly the whole stack: Finally, we got decent IPv6 support, big thanks to
    Ivan! (this is work in progress: we're just post release anyway :-)


  ++ Bugfixes:

  2016-08-23: Simon Goldschmidt
  * etharp: removed ETHARP_TRUST_IP_MAC since it is insecure and we don't need
    it any more after implementing unicast ARP renewal towards arp entry timeout

  2016-07-20: Simon Goldschmidt
  * memp.h/.c: fixed bug #48442 (memp stats don't work for MEMP_MEM_MALLOC)

  2016-07-21: Simon Goldschmidt (patch by Ambroz Bizjak)
  * tcp_in.c, tcp_out.c: fixed bug #48543 (TCP sent callback may prematurely
    report sent data when only part of a segment is acked) and don't include
    SYN/FIN in snd_buf counter

  2016-07-19: Simon Goldschmidt
  * etharp.c: fixed bug #48477 (ARP input packet might update static entry)

  2016-07-11: Simon Goldschmidt
  * tcp_in.c: fixed bug #48476 (TCP sent callback called wrongly due to picking
    up old pcb->acked

  2016-06-30: Simon Goldschmidt (original patch by Fabian Koch)
  * tcp_in.c: fixed bug #48170 (Vulnerable to TCP RST spoofing)

  2016-05-20: Dirk Ziegelmeier
  * sntp.h/.c: Fix return value of sntp_getserver() call to return a pointer

  2016-04-05: Simon Goldschmidt (patch by Philip Gladstone)
  * udp.c: patch #8358: allow more combinations of listening PCB for IPv6

  2016-04-05: Simon Goldschmidt
  * netconn/socket API: fixed bug# 43739 (Accept not reporting errors about
    aborted connections): netconn_accept() returns ERR_ABRT (sockets: ECONNABORTED)
    for aborted connections, ERR_CLSD (sockets: EINVAL) if the listening netconn
    is closed, which better seems to follow the standard.

  2016-03-23: Florent Matignon
  * dhcp.c: fixed bug #38203: DHCP options are not recorded in all DHCP ack messages

  2016-03-22: Simon Goldschmidt
  * tcp: changed accept handling to be done internally: the application does not
    have to call tcp_accepted() any more. Instead, when delaying accept (e.g. sockets
    do), call tcp_backlog_delayed()/tcp_backlog_accepted() (fixes bug #46696)

  2016-03-22: Simon Goldschmidt
  * dns.c: ignore dns response parsing errors, only abort resolving for correct
    responses or error responses from correct server (bug #47459)

  2016-03-17: Simon Goldschmidt
  * api_msg.c: fixed bug #47448 (netconn/socket leak if RST is received during close)

  2016-03-17: Joel Cunningham
  * api_msg.c: don't fail closing a socket/netconn when failing to allocate the
    FIN segment; blocking the calling thread for a while is better than risking
    leaking a netconn/socket (see bug #46701)

  2016-03-16: Joel Cunningham
  * tcp_out.c: reset rto timer on fast retransmission

  2016-03-16: Deomid Ryabkov
  * tcp_out.c: fixed bug #46384 Segment size calculation bug with MSS != TCP_MSS

  2016-03-05: Simon Goldschmidt
  * err.h/.c, sockets.c: ERR_IF is not necessarily a fatal error

  2015-11-19: fix by Kerem Hadimli
  * sockets.c: fixed bug #46471: lwip_accept() leaks socket descriptors if new
    netconn was already closed because of peer behavior

  2015-11-12: fix by Valery Ushakov
  * tcp_in.c: fixed bug #46365 tcp_accept_null() should call tcp_abort()

  2015-10-02: Dirk Ziegelmeier/Simon Goldschmidt
  * snmp: cleaned up snmp structs API (fixed race conditions from bug #46089,
    reduce ram/rom usage of tables): incompatible change for private MIBs

  2015-09-30: Simon Goldschmidt
  * ip4_addr.c: fixed bug #46072: ip4addr_aton() does not check the number range
    of all address parts

  2015-08-28: Simon Goldschmidt
  * tcp.c, tcp_in.c: fixed bug #44023: TCP ssthresh value is unclear: ssthresh
    is set to the full send window for active open, too, and is updated once
    after SYN to ensure the correct send window is used

  2015-08-28: Simon Goldschmidt
  * tcp: fixed bug #45559: Window scaling casts u32_t to u16_t without checks

  2015-08-26: Simon Goldschmidt
  * ip6_frag.h/.c: fixed bug bug #41009: IPv6 reassembly broken on 64-bit platforms:
    define IPV6_FRAG_COPYHEADER==1 on these platforms to copy the IPv6 header
    instead of referencing it, which gives more room for struct ip6_reass_helper

  2015-08-25: Simon Goldschmidt
  * sockets.c: fixed bug #45827: recvfrom: TCP window is updated with MSG_PEEK

  2015-08-20: Manoj Kumar
  * snmp_msg.h, msg_in.c: fixed bug #43790: Sending octet string of Length >255
    from SNMP agent

  2015-08-19: Jens Nielsen
  * icmp.c, ip4.c, tcp_in.c, udp.c, raw.c: fixed bug #45120: Broadcast & multiple
    interfaces handling

  2015-08-19: Simon Goldschmidt (patch by "Sandra")
  * dns.c: fixed bug #45004: dns response without answer might be discarded

  2015-08-18: Chrysn
  * timers.c: patch #8704 fix sys_timeouts_sleeptime function

  2015-07-01: Erik Ekman
  * puf.c: fixed bug #45454 (pbuf_take_at() skips write and returns OK if offset
    is at start of pbuf in chain)

  2015-05-19: Simon Goldschmidt
  * dhcp.h/.c: fixed bugs #45140 and #45141 (dhcp was not stopped correctly after
    fixing bug #38204)

  2015-03-21: Simon Goldschmidt (patch by Homyak)
  * tcp_in.c: fixed bug #44766 (LWIP_WND_SCALE: tcphdr->wnd was not scaled in
    two places)

  2015-03-21: Simon Goldschmidt
  * tcp_impl.h, tcp.c, tcp_in.c: fixed bug #41318 (Bad memory ref in tcp_input()
    after tcp_close())

  2015-03-21: Simon Goldschmidt
  * tcp_in.c: fixed bug #38468 (tcp_sent() not called on half-open connection for
    data ACKed with the same ack as FIN)

  2015-03-21: Simon Goldschmidt (patch by Christoffer Lind)
  * dhcp.h/.c: fixed bug #38204 (DHCP lease time not handled correctly)

  2015-03-20: Simon Goldschmidt
  * dhcp.c: fixed bug #38714 (Missing option and client address in DHCPRELEASE message)

  2015-03-19: Simon Goldschmidt
  * api.h, tcpip.h, api_lib.c, api_msg.c: fixed race conditions in assigning
    netconn->last_err (fixed bugs #38121 and #37676)

  2015-03-09: Simon Goldschmidt
  * ip4.c: fixed the IPv4 part of bug #43904 (ip_route() must detect linkup status)

  2015-03-04: Simon Goldschmidt
  * nd6.c: fixed bug #43784 (a host should send at least one Router Solicitation)

  2015-03-04: Valery Ushakov
  * ip6.c: fixed bug #41094 (Byte-order bug in IPv6 fragmentation header test)

  2015-03-04: Zach Smith
  * nd6.c: fixed bug #38153 (nd6_input() byte order issues)

  2015-02-26: Simon Goldschmidt
  * netif.c, tcp.h/.c: fixed bug #44378 (TCP connections are not aborted on netif
    remove)

  2015-02-25: Simon Goldschmidt
  * ip4.c, etharp.c: fixed bug #40177 (System hangs when dealing with corrupted
    packets), implemented task #12357 (Ensure that malicious packets don't
    assert-fail): improved some pbuf_header calls to not assert-fail.

  2015-02-25: patch by Joel Cunningham
  * udp.h/.c, sockets.c: fixed bug #43028 (IP_MULTICAST_TTL affects unicast
    datagrams)

  2015-02-25: patch by Greg Renda
  * ip4_frag.c: fixed bug #38210 (ip reassembly while remove oldest datagram)

  2015-02-25: Simon Goldschmidt
  * sockets.c: fixed bug #38165 (socket with mulicast): ensure igmp membership
    are dropped when socket (not netconn!) is closed.

  2015-02-25: Simon Goldschmidt
  * ip4.h/.c, udp.c: fixed bug #38061 (wrong multicast routing in IPv4) by
    adding an optional default netif for multicast routing

  2015-02-25: Simon Goldschmidt
  * netconn API: fixed that netconn_connect still used message passing for
    LWIP_TCPIP_CORE_LOCKING==1

  2015-02-22: patch by Jens Nielsen
  * icmp.c: fixed bug #38803 (Source address in broadcast ping reply)

  2015-02-22: Simon Goldschmidt
  * udp.h, sockets.c: added proper accessor functions for pcb->multicast_ip
    (previously used by get/setsockopt only)

  2015-02-18: Simon Goldschmidt
  * sockets.c: Fixed select not reporting received FIN as 'readable' in certain
    rare cases (bug #43779: select(), close(), and TCP retransmission error)

  2015-02-17: Simon Goldschmidt
  * err.h, sockets.c, api_msg.c: fixed bug #38853 "connect() use a wrong errno":
    return ERR_ALREADY/EALRADY during connect, ERR_ISCONN/EISCONN when already
    connected

  2015-02-17: Simon Goldschmidt
  * tcp_impl.h, tcp_out.c, tcp.c, api_msg.c: fixed bug #37614 "Errors from
    ipX_output are not processed". Now tcp_output(_segment) checks for the return
    value of ipX_output and does not try to send more on error. A netif driver
    can call tcp_txnow() (from tcpip_thread!) to try to send again if TX buffers
    are available again.

  2015-02-14: patches by Freddie Chopin
  * snmp*: made community writable, fixed some const pointers

  2015-02-13: Simon Goldschmidt
  * msg_in.c: fixed bug #22070 "MIB_OBJECT_WRITE_ONLY not implemented in SNMP"

  2015-02-12: Simon Goldschmidt
  * ip.h, ip4.c, ip6.c: fixed bug #36403 "ip4_input() and ip6_input() always pass
    inp to higher layers": now the accepting netif is passed up, but the input
    netif is available through ip_current_input_netif() if required.

  2015-02-11: patch by hichard
  * tcpip.c: fixed bug #43094 "The function tcpip_input() forget to handle IPv6"

  2015-02-10: Simon Goldschmidt
  * netconn API: fixed that netconn_close/netconn_delete still used message passing
    for LWIP_TCPIP_CORE_LOCKING==1

  2015-02-10: Simon Goldschmidt
  * netconn/socket api: fixed bug #44225 "closing TCP socket should time out
    eventually", implemented task #6930 "Implement SO_LINGER": closing TCP sockets
    times out after 20 seconds or after the configured SND_TIMEOUT or depending
    on the linger settings.

  2015-01-27: Simon Goldschmidt
  * api_msg.c: fixed that SHUT_RD followed by SHUT_WR was different to SHUT_RDWR,
    fixed return value of lwip_netconn_do_close on unconnected netconns

  2015-01-17: Simon Goldschmidt
  * sockets.c: fixed bug #43361 select() crashes with stale FDs

  2015-01-17: Simon Goldschmidt
  * sockets.c/.h, memp_std.h: fixed bug #40788 "lwip_setsockopt_internal() crashes"
    by rewriting set/getsockopt functions to combine checks with the actual code
    and add more NULL checks; this also fixes that CORE_LOCKING used message
    passing for set/getsockopt.

  2014-12-19: Simon Goldschmidt
  * opt.h, dhcp.h/.c: prevent dhcp from starting when netif link is down (only
    when LWIP_DHCP_CHECK_LINK_UP==1, which is disabled by default for
    compatibility reasons)

  2014-12-17: Simon Goldschmidt
  * tcp_out.c: fixed bug #43840 Checksum error for TCP_CHECKSUM_ON_COPY==1 for
    no-copy data with odd length

  2014-12-10: Simon Goldschmidt
  * sockets.c, tcp.c, others: fixed bug #43797 set/getsockopt: SO_SNDTIMEO/SO_RCVTIMEO
    take int as option but should take timeval (LWIP_SO_SNDRCVTIMEO_STANDARD==0 can
    be used to revert to the old 'winsock' style behaviour)
    Fixed implementation of SO_ACCEPTCONN to just look at the pcb state

  2014-12-09: Simon Goldschmidt
  * ip4.c: fixed bug #43596 IGMP queries from 0.0.0.0 are discarded

  2014-10-21: Simon Goldschmidt (patch by Joel Cunningham and Albert Huitsing)
  * sockts.c: fixed bugs #41495 Possible threading issue in select() and #43278
    event_callback() handle context switch when calling sys_sem_signal()

  2014-10-21: Simon Goldschmidt
  * api_msg.c: fixed bug #38219 Assert on TCP netconn_write with sndtimeout set

  2014-09-16: Kevin Cernekee
  * dns.c: patch #8480 Fix handling of dns_seqno wraparound

  2014-09-16: Simon Goldschmidt
  * tcp_out.c: fixed bug #43192 tcp_enqueue_flags() should not check TCP_SND_QUEUELEN
    when sending FIN

  2014-09-03: Simon Goldschmidt
  * msg_in.c: fixed bug #39355 SNMP Memory Leak in case of error

  2014-09-02: Simon Goldschmidt
  * err.h/.c, sockets.c, api_msg.c: fixed bug #43110 call getpeername() before
    listen() will cause a error

  2014-09-02: Simon Goldschmidt
  * sockets.c: fixed bug #42117 lwip_fcntl does not set errno

  2014-09-02: Simon Goldschmidt
  * tcp.c: fixed bug #42299 tcp_abort() leaves freed pcb on tcp_bound_pcbs list

  2014-08-20: Simon Goldschmidt
  * dns.c: fixed bug #42987 lwIP is vulnerable to DNS cache poisoning due to
    non-randomized TXIDs

  2014-06-03: Simon Goldschmidt
  * tcp_impl.h, tcp_in.c: fixed bug #37969 SYN packet dropped as short packet in
    tcp_input function

  2014-05-20: Simon Goldschmidt
  * tcp_out.c: fixed bug #37184 tcp_write problem for pcbs in the SYN_SENT state

  2014-05-19: Simon Goldschmidt
  * *.h: Fixed bug #35874 reserved identifier violation (removed leading underscores
    from header include guards)

  2014-04-08: Simon Goldschmidt
  * tcp.c: Fixed bug #36167 tcp server crash when client closes (maximum window)

  2014-04-06: Simon Goldschmidt
  * tcp_in.c: Fixed bug #36210 lwIP does not elicit an empty ACK when received
    unacceptable ACK

  2014-04-06: Simon Goldschmidt
  * dhcp.c, ip4.c/.h, ip6.c/.h, udp.c/.h, ip.h: Fixed bug #41787 DHCP Discovery
    is invalid when an IP is set to thet netif.

  2014-03-14: Simon Goldschmidt
  * tcp_out.c: Fixed bug #36153 TCP Cheksum error if LWIP_CHECKSUM_ON_COPY=1

  2014-03-11: Simon Goldschmidt (patch by Mason)
  * opt.h, sockets.c: fixed bug #35928 BSD sockets functions must set errno for
    POSIX-compliance

  2014-02-27: Simon Goldschmidt
  * dhcp.c: fixed bug #40303 DHCP xid renewed when sending a DHCPREQUEST

  2014-02-27: Simon Goldschmidt
  * raw.c: fixed bug #41680 raw socket can not receive IPv6 packet when
    IP_SOF_BROADCAST_RECV==1

  2014-02-27: Simon Goldschmidt
  * api_msg.c, sockets.c: fixed bug #38404 getpeeraddr returns success on
    unconnected/listening TCP sockets

  2014-02-27: Simon Goldschmidt
  * sockets.c: fixed bug #41729 Some socket functions return Exyz instead of -1

  2014-02-25: Simon Goldschmidt
  * ip4.c: fixed bug #39514 ip_route() may return an IPv6-only interface

  2014-02-25: Simon Goldschmidt, patch by Fatih Asici
  * pbuf.c: fixed bug #39356 Wrong increment in pbuf_memfind()

  2014-02-25: Simon Goldschmidt
  * netif.c/.h, udp.c: fixed bug #39225 udp.c uses netif_matches_ip6_addr() incorrectly;
    renamed function netif_matches_ip6_addr() to netif_get_ip6_addr_match()

  2014-02-25: Simon Goldschmidt
  * igmp.c: fixed bug #39145 IGMP membership report for 224.0.0.1

  2014-02-22: Simon Goldschmidt (patch by Amir Shalem)
  * etharp.c, opt.h: fixed bug #34681 Limit ARP queue length by ARP_QUEUE_LEN (=3)

  2014-02-22: Simon Goldschmidt (patch by Amir Shalem)
  * etharp.h/.c: fixed bug #34682 Limit ARP request flood for unresolved entry

  2014-02-20: Simon Goldschmidt
  * tcp_out.c: fixed bug #39683 Assertion "seg->tcphdr not aligned" failed with
    MEM_ALIGNMENT = 8

  2014-02-20: Simon Goldschmidt
  * sockets.c: fixed bug #39882 No function shall set errno to 0

  2014-02-20: Simon Goldschmidt
  * mib_structs.c: fixed bug #40050 SNMP problem with MIB arrays > 255

  2014-02-20: Simon Goldschmidt
  * api.h, sockets.c: fixed bug #41499 netconn::recv_avail can overflow

  2014-01-08: Stathis Voukelatos
  * memp_std.h: patch #7928 Fixed size calculation in MALLOC memory pool
    creation macro

  2014-01-18: Brian Fahs
  * tcp_out.c: patch #8237: tcp_rexmit_rto fails to update pcb->unsent_oversize
    when necessary

  2014-01-17: Grant Erickson, Jay Logue, Simon Goldschmidt
  * ipv6.c, netif.c: patch #7913 Enable Support for IPv6 Loopback

  2014-01-16: Stathis Voukelatos
  * netif.c: patch #7902 Fixed netif_poll() operation when LWIP_LOOPBACK_MAX_PBUFS > 0

  2014-01-14: "Freddie Chopin"
  * snmp.h, mib2.c: fixed constness and spelling of sysdescr

  2014-01-14: Simon Goldschmidt (patch by Thomas Faber)
  * tcpip.c: patch #8241: Fix implicit declaration of ip_input with
    LWIP_TCPIP_CORE_LOCKING_INPUT disabled

  2014-01-14: chrysn
  * timers.c: patch #8244 make timeouts usable reliably from outside of the
    timeout routine

  2014-01-10: Simon Goldschmidt
  * ip_frag.c, ip6_frag.c: fixed bug #41041 Potential use-after-free in IPv6 reassembly

  2014-01-10: Simon Goldschmidt
  * memp.c: fixed bug #41188 Alignment error in memp_init() when MEMP_SEPARATE_POOLS==1

  2014-01-10: Simon Goldschmidt
  * tcp.c: fixed bug #39898 tcp_fasttmr() possible lock due to infinte queue process loop

  2013-06-29: Simon Goldschmidt
  * inet.h, sockets.h: partially fixed bug #37585: IPv6 compatibility (in socket structs)

  2013-06-29: Simon Goldschmidt
  * inet6.h: bug #37585/task #12600: fixed struct in6_addr.s6_addr to conform to spec

  2013-04-24: patch by Liam <morepork>
  * api_msg.c: patch #8008 Fix a potential null pointer dereference in assert

  2013-04-24: Simon Goldschmidt
  * igmp.c: fixed possible division by zero

  2013-04-24: Simon Goldschmidt
  * ip6.h, some ipv6 C files: fixed bug #38526 Coverity: Recursive Header Inclusion in ip6.h

  2013-04-24: Simon Goldschmidt (patch by Emil Ljungdahl):
  * netif.c: fixed bug #38586 netif_loop_output() "deadlocks"

  2013-01-15: Simon Goldschmidt
  * ip4.c: fixed bug #37665 ip_canforward operates on address in wrong byte order

  2013-01-15: Simon Goldschmidt
  * pbuf.h: fixed bug #38097 pbuf_free_ooseq() warning

  2013-01-14: Simon Goldschmidt
  * dns.c: fixed bug #37705 Possible memory corruption in DNS query

  2013-01-11: Simon Goldschmidt
  * raw.c: fixed bug #38066 Raw pcbs can alter packet without eating it

  2012-08-22: Simon Goldschmidt
  * memp.c: fixed bug #37166: memp_sanity check loops itself

  2012-08-13: Simon Goldschmidt
  * dhcp.c: fixed bug #36645: Calling dhcp_release before dhcp_start
    dereferences NULL

  2012-08-13: Simon Goldschmidt
  * msg_out.c: fixed bug #36840 snmp_send_trap() NULL de-reference if traps
    configured but no interfaces available

  2012-08-13: Simon Goldschmidt
  * dns.c: fixed bug #36899 DNS TTL 0 is cached for a long time

  2012-05-11: Simon Goldschmidt (patch by Marty)
  * memp.c: fixed bug #36412: memp.c does not compile when
    MEMP_OVERFLOW_CHECK > zero and MEMP_SEPARATE_POOLS == 1

  2012-05-03: Simon Goldschmidt (patch by Sylvain Rochet)
  * ppp.c: fixed bug #36283 (PPP struct used on header size computation and
    not packed)

  2012-05-03: Simon Goldschmidt (patch by David Empson)
  * ppp.c: fixed bug #36388 (PPP: checksum-only in last pbuf leads to pbuf with
    zero length)

  2012-03-25: Simon Goldschmidt
  * api_msg.c: Fixed bug #35817: do_connect() invalidly signals op_completed
    for UDP/RAW with LWIP_TCPIP_CORE_LOCKING==1

  2012-03-25: Simon Goldschmidt
  * api_msg.h, api_lib.c, api_msg.c, netifapi.c: fixed bug #35931: Name space
    pollution in api_msg.c and netifapi.c

  2011-08-24: Simon Goldschmidt
  * inet6.h: fixed bug #34124 struct in6_addr does not conform to the standard



(STABLE-1.4.1)

  ++ New features:

  2012-03-25: Simon Goldschmidt (idea by Mason)
  * posix/*: added posix-compatibility include files posix/netdb.h and posix/sys/socket.h
    which are a simple wrapper to the correct lwIP include files.
 
  2012-01-16: Simon Goldschmidt
  * opt.h, icmp.c: Added option CHECKSUM_GEN_ICMP

  2011-12-17: Simon Goldschmidt
  * ip.h: implemented API functions to access so_options of IP pcbs (UDP, TCP, RAW)
    (fixes bug #35061)

  2011-09-27: Simon Goldschmidt
  * opt.h, tcp.c, tcp_in.c: Implemented limiting data on ooseq queue (task #9989)
    (define TCP_OOSEQ_MAX_BYTES / TCP_OOSEQ_MAX_PBUFS in lwipopts.h)

  2011-09-21: Simon Goldschmidt
  * opt.h, api.h, api_lib.c, api_msg.h/.c, sockets.c: Implemented timeout on
    send (TCP only, bug #33820)

  2011-09-21: Simon Goldschmidt
  * init.c: Converted runtime-sanity-checks into compile-time checks that can
    be disabled (since runtime checks can often not be seen on embedded targets)

  2011-09-11: Simon Goldschmidt
  * ppp.h, ppp_impl.h: splitted ppp.h to an internal and external header file
    to get a clear separation of which functions an application or port may use
    (task #11281)

 2011-09-11: Simon Goldschmidt
  * opt.h, tcp_impl.h, tcp.c, udp.h/.c: Added a config option to randomize
    initial local TCP/UDP ports (so that different port ranges are used after
    a reboot; bug #33818; this one added tcp_init/udp_init functions again)

  2011-09-03: Simon Goldschmidt
  * dhcp.c: DHCP uses LWIP_RAND() for xid's (bug #30302)

  2011-08-24: Simon Goldschmidt
  * opt.h, netif.h/.c: added netif remove callback (bug #32397)

  2011-07-26: Simon Goldschmidt
  * etharp.c: ETHARP_SUPPORT_VLAN: add support for an external VLAN filter
    function instead of only checking for one VLAN (define ETHARP_VLAN_CHECK_FN)

  2011-07-21: Simon Goldschmidt (patch by hanhui)
  * ip4.c, etharp.c, pbuf.h: bug #33634 ip_forward() have a faulty behaviour:
    Added pbuf flags to mark incoming packets as link-layer broadcast/multicast.
    Also added code to allow ip_forward() to forward non-broadcast packets to
    the input netif (set IP_FORWARD_ALLOW_TX_ON_RX_NETIF==1).

  2011-06-26: Simon Goldschmidt (patch by Cameron Gutman)
  * tcp.c, tcp_out.c: bug #33604: added some more asserts to check that
    pcb->state != LISTEN

   2011-05-14: Simon Goldschmidt (patch by Stéphane Lesage)
  * tcpip.c/.h: patch #7449 allow tcpip callback from interrupt with static
    memory message


  ++ Bugfixes:

  2012-09-26: Simon Goldschmidt
  * api_msg.c: fixed bug #37405 'err_tcp()' uses already freed 'netconn' object

  2012-09-26: patch by Henrik Persson
  * dhcp.c: patch #7843 Fix corner case with dhcp timeouts

  2012-09-26: patch by Henrik Persson
  * dhcp.c: patch #7840 Segfault in dhcp_parse_reply if no end marker in dhcp packet

  2012-08-22: Simon Goldschmidt
  * memp.c: fixed bug #37166: memp_sanity check loops itself

  2012-05-08: Simon Goldschmidt
  * tcp_out.c: fixed bug: #36380 unsent_oversize mismatch in 1.4.1RC1 (this was
    a debug-check issue only)

  2012-03-27: Simon Goldschmidt
  * vj.c: fixed bug #35756 header length calculation problem in ppp/vj.c

  2012-03-27: Simon Goldschmidt (patch by Mason)
  * tcp_out.c: fixed bug #35945: SYN packet should provide the recv MSS not the
    send MSS

  2012-03-22: Simon Goldschmidt
  * ip4.c: fixed bug #35927: missing refragmentaion in ip_forward
 
  2012-03-20: Simon Goldschmidt (patch by Mason)
  * netdb.c: fixed bug #35907: lwip_gethostbyname_r returns an invalid h_addr_list
 
  2012-03-12: Simon Goldschmidt (patch by Bostjan Meglic)
  * ppp.c: fixed bug #35809: PPP GetMask(): Compiler warning on big endian,
    possible bug on little endian system

  2012-02-23: Simon Goldschmidt
  * etharp.c: fixed bug #35595: Impossible to send broadcast without a gateway
    (introduced when fixing bug# 33551)

  2012-02-16: Simon Goldschmidt
  * ppp.c: fixed pbuf leak when PPP session is aborted through pppSigHUP()
    (bug #35541: PPP Memory Leak)

  2012-02-16: Simon Goldschmidt
  * etharp.c: fixed bug #35531: Impossible to send multicast without a gateway
    (introduced when fixing bug# 33551)

  2012-02-16: Simon Goldschmidt (patch by Stéphane Lesage)
  * msg_in.c, msg_out.c: fixed bug #35536 SNMP: error too big response is malformed

  2012-02-15: Simon Goldschmidt
  * init.c: fixed bug #35537: MEMP_NUM_* sanity checks should be disabled with
    MEMP_MEM_MALLOC==1

  2012-02-12: Simon Goldschmidt
  * tcp.h, tcp_in.c, tcp_out.c: partly fixed bug #25882: TCP hangs on
    MSS > pcb->snd_wnd (by not creating segments bigger than half the window)

  2012-02-11: Simon Goldschmidt
  * tcp.c: fixed bug #35435: No pcb state check before adding it to time-wait
    queue while closing

  2012-01-22: Simon Goldschmidt
  * tcp.c, tcp_in.c: fixed bug #35305: pcb may be freed too early on shutdown(WR)

  2012-01-21: Simon Goldschmidt
  * tcp.c: fixed bug #34636: FIN_WAIT_2 - Incorrect shutdown of TCP pcb

  2012-01-20: Simon Goldschmidt
  * dhcp.c: fixed bug #35151: DHCP asserts on incoming option lengths

 2012-01-20: Simon Goldschmidt
  * pbuf.c: fixed bug #35291: NULL pointer in pbuf_copy

  2011-11-25: Simon Goldschmidt
  * tcp.h/.c, tcp_impl.h, tcp_in.c: fixed bug #31177: tcp timers can corrupt
    tcp_active_pcbs in some cases

  2011-11-23: Simon Goldschmidt
  * sys.c: fixed bug #34884: sys_msleep() body needs to be surrounded with
    '#ifndef sys_msleep'

  2011-11-22: Simon Goldschmidt
  * netif.c, etharp.h/.c: fixed bug #34684: Clear the arp table cache when
    netif is brought down

  2011-10-28: Simon Goldschmidt
  * tcp_in.c: fixed bug #34638: Dead code in tcp_receive - pcb->dupacks

  2011-10-23: Simon Goldschmidt
  * mem.c: fixed bug #34429: possible memory corruption with
    LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT set to 1

  2011-10-18: Simon Goldschmidt
  * arch.h, netdb.c: fixed bug #34592: lwip_gethostbyname_r uses nonstandard
    error value

  2011-10-18: Simon Goldschmidt
  * opt.h: fixed default values of TCP_SNDLOWAT and TCP_SNDQUEUELOWAT for small
    windows (bug #34176 select after non-blocking send times out)

  2011-10-18: Simon Goldschmidt
  * tcp_impl.h, tcp_out.c: fixed bug #34587: TCP_BUILD_MSS_OPTION doesn't
    consider netif->mtu, causes slow network

  2011-10-18: Simon Goldschmidt
  * sockets.c: fixed bug #34581 missing parentheses in udplite sockets code

  2011-10-18: Simon Goldschmidt
  * sockets.h: fixed bug #34580 fcntl() is missing in LWIP_COMPAT_SOCKETS

  2011-10-17: Simon Goldschmidt
  * api_msg.c: fixed bug #34569: shutdown(SHUT_WR) crashes netconn/socket api

  2011-10-13: Simon Goldschmidt
  * tcp_in.c, tcp_out.c: fixed bug #34517 (persist timer is started although no
    zero window is received) by starting the persist timer when a zero window is
    received, not when we have more data queued for sending than fits into the
    window

  2011-10-13: Simon Goldschmidt
  * def.h, timers.c: fixed bug #34541: LWIP_U32_DIFF is unnecessarily complex

  2011-10-13: Simon Goldschmidt
  * sockets.c, api_lib.c: fixed bug #34540: compiler error when CORE_LOCKING is
    used and not all protocols are enabled

  2011-10-12: Simon Goldschmidt
  * pbuf.c: fixed bug #34534: Error in sending fragmented IP if MEM_ALIGNMENT > 4

  2011-10-09: Simon Goldschmidt
  * tcp_out.c: fixed bug #34426: tcp_zero_window_probe() transmits incorrect
    byte value when pcb->unacked != NULL

  2011-10-09: Simon Goldschmidt
  * ip4.c: fixed bug #34447 LWIP_IP_ACCEPT_UDP_PORT(dst_port) wrong

  2011-09-27: Simon Goldschmidt
  * tcp_in.c, tcp_out.c: Reset pcb->unsent_oversize in 2 more places...

  2011-09-27: Simon Goldschmidt
  * tcp_in.c: fixed bug #28288: Data after FIN in oos queue

  2011-09-27: Simon Goldschmidt
  * dhcp.c: fixed bug #34406 dhcp_option_hostname() can overflow the pbuf

  2011-09-24: Simon Goldschmidt
  * mem.h: fixed bug #34377 MEM_SIZE_F is not defined if MEM_LIBC_MALLOC==1

  2011-09-23: Simon Goldschmidt
  * pbuf.h, tcp.c, tcp_in.c: fixed bug #33871: rejecting TCP_EVENT_RECV() for
    the last packet including FIN can lose data

  2011-09-22: Simon Goldschmidt
  * tcp_impl.h: fixed bug #34355: nagle does not take snd_buf/snd_queuelen into
    account

  2011-09-21: Simon Goldschmidt
  * opt.h: fixed default value of TCP_SND_BUF to not violate the sanity checks
    in init.c

  2011-09-20: Simon Goldschmidt
  * timers.c: fixed bug #34337 (possible NULL pointer in sys_check_timeouts)

  2011-09-11: Simon Goldschmidt
  * tcp_out.c: use pcb->mss instead of TCP_MSS for preallocate mss-sized pbufs
    (bug #34019)

  2011-09-09: Simon Goldschmidt
  * udp.c: fixed bug #34072: UDP broadcast is received from wrong UDP pcb if
    udp port matches

  2011-09-03: Simon Goldschmidt
  * tcp_in.c: fixed bug #33952 PUSH flag in incoming packet is lost when packet
    is aggregated and sent to application

  2011-09-01: Simon Goldschmidt
  * opt.h: fixed bug #31809 LWIP_EVENT_API in opts.h is inconsistent compared
    to other options

  2011-09-01: Simon Goldschmidt
  * tcp_in.c: fixed bug #34111 RST for ACK to listening pcb has wrong seqno

  2011-08-24: Simon Goldschmidt
  * api_msg.c, sockets.c: fixed bug #33956 Wrong error returned when calling
    accept() on UDP connections

  2011-08-24: Simon Goldschmidt
  * sockets.h: fixed bug #34057 socklen_t should be a typedef

  2011-08-24: Simon Goldschmidt
  * pbuf.c: fixed bug #34112 Odd check in pbuf_alloced_custom (typo)

  2011-08-24: Simon Goldschmidt
  * dhcp.c: fixed bug #34122 dhcp: hostname can overflow

  2011-08-24: Simon Goldschmidt
  * netif.c: fixed bug #34121 netif_add/netif_set_ipaddr fail on NULL ipaddr

  2011-08-22: Simon Goldschmidt
  * tcp_out.c: fixed bug #33962 TF_FIN not always set after FIN is sent. (This
    merely prevents nagle from not transmitting fast after closing.)

  2011-07-22: Simon Goldschmidt
  * api_lib.c, api_msg.c, sockets.c, api.h: fixed bug #31084 (socket API returns
    always EMSGSIZE on non-blocking sockets if data size > send buffers) -> now
    lwip_send() sends as much as possible for non-blocking sockets

  2011-07-22: Simon Goldschmidt
  * pbuf.c/.h, timers.c: freeing ooseq pbufs when the pbuf pool is empty implemented
    for NO_SYS==1: when not using sys_check_timeouts(), call PBUF_CHECK_FREE_OOSEQ()
    at regular intervals from main level.

  2011-07-21: Simon Goldschmidt
  * etharp.c: fixed bug #33551 (ARP entries may time out although in use) by
    sending an ARP request when an ARP entry is used in the last minute before
    it would time out.

  2011-07-04: Simon Goldschmidt
  * sys_arch.txt: Fixed documentation after changing sys arch prototypes for 1.4.0.

  2011-06-26: Simon Goldschmidt
  * tcp.c: fixed bug #31723 (tcp_kill_prio() kills pcbs with the same prio) by
    updating its documentation only.

 2011-06-26: Simon Goldschmidt
  * mem.c: fixed bug #33545: With MEM_USE_POOLS==1, mem_malloc can return an
    unaligned pointer.

  2011-06-26: Simon Goldschmidt
  * mem.c: fixed bug #33544 "warning in mem.c in lwip 1.4.0 with NO_SYS=1"

   2011-05-25: Simon Goldschmidt
  * tcp.c: fixed bug #33398 (pointless conversion when checking TCP port range)



(STABLE-1.4.0)

  ++ New features:

  2011-03-27: Simon Goldschmidt
  * tcp_impl.h, tcp_in.c, tcp_out.c: Removed 'dataptr' from 'struct tcp_seg' and
    calculate it in tcp_zero_window_probe (the only place where it was used).

  2010-11-21: Simon Goldschmidt
  * dhcp.c/.h: Added a function to deallocate the struct dhcp from a netif
    (fixes bug #31525).

  2010-07-12: Simon Goldschmidt (patch by Stephane Lesage)
  * ip.c, udp.c/.h, pbuf.h, sockets.c: task #10495: Added support for
    IP_MULTICAST_LOOP at socket- and raw-API level.

  2010-06-16: Simon Goldschmidt
  * ip.c: Added an optional define (LWIP_IP_ACCEPT_UDP_PORT) that can allow
    link-layer-addressed UDP traffic to be received while a netif is down (just
    like DHCP during configuration)

  2010-05-22: Simon Goldschmidt
  * many many files: bug #27352: removed packing from ip_addr_t, the packed
    version is now only used in protocol headers. Added global storage for
    current src/dest IP address while in input functions.

  2010-05-16: Simon Goldschmidt
  * def.h: task #10391: Add preprocessor-macros for compile-time htonl
    calculation (and use them throughout the stack where applicable)

  2010-05-16: Simon Goldschmidt
  * opt.h, memp_std.h, memp.c, ppp_oe.h/.c: PPPoE now uses its own MEMP pool
    instead of the heap (moved struct pppoe_softc from ppp_oe.c to ppp_oe.h)

  2010-05-16: Simon Goldschmidt
  * opt.h, memp_std.h, dns.h/.c: DNS_LOCAL_HOSTLIST_IS_DYNAMIC uses its own
    MEMP pool instead of the heap

  2010-05-13: Simon Goldschmidt
  * tcp.c, udp.c: task #6995: Implement SO_REUSEADDR (correctly), added
    new option SO_REUSE_RXTOALL to pass received UDP broadcast/multicast
    packets to more than one pcb.

  2010-05-02: Simon Goldschmidt
  * netbuf.h/.c, sockets.c, api_msg.c: use checksum-on-copy for sending
    UDP data for LWIP_NETIF_TX_SINGLE_PBUF==1

  2010-04-30: Simon Goldschmidt
  * udp.h/.c, pbuf.h/.c: task #6849: added udp_send(_to/_if) functions that
    take a precalculated checksum, added pbuf_fill_chksum() to copy data
    into a pbuf and at the same time calculating the checksum for that data

  2010-04-29: Simon Goldschmidt
  * ip_addr.h, etharp.h/.c, autoip.c: Create overridable macros for copying
    2-byte-aligned IP addresses and MAC addresses

  2010-04-28: Patch by Bill Auerbach
  * ip.c: Inline generating IP checksum to save a function call

  2010-04-14: Simon Goldschmidt
  * tcpip.h/.c, timers.c: Added an overridable define to get informed when the
    tcpip_thread processes messages or timeouts to implement a watchdog.

  2010-03-28: Simon Goldschmidt
  * ip_frag.c: create a new (contiguous) PBUF_RAM for every outgoing
    fragment if LWIP_NETIF_TX_SINGLE_PBUF==1

  2010-03-27: Simon Goldschmidt
  * etharp.c: Speedup TX by moving code from find_entry to etharp_output/
    etharp_query to prevent unnecessary function calls (inspired by
    patch #7135).

  2010-03-20: Simon Goldschmidt
  * opt.h, tcpip.c/.h: Added an option to disable tcpip_(un)timeout code
    since the linker cannot do this automatically to save space.

  2010-03-20: Simon Goldschmidt
  * opt.h, etharp.c/.h: Added support for static ARP table entries

  2010-03-14: Simon Goldschmidt
  * tcp_impl.h, tcp_out.c, inet_chksum.h/.c: task #6849: Calculate checksum
    when creating TCP segments, not when (re-)transmitting them.

  2010-03-07: Simon Goldschmidt
  * sockets.c: bug #28775 (select/event_callback: only check select_cb_list
    on change) plus use SYS_LIGHTWEIGHT_PROT to protect the select code.
    This should speed up receiving data on sockets as the select code in
    event_callback is only executed when select is waiting.

  2010-03-06: Simon Goldschmidt
  * tcp_out.c: task #7013 (Create option to have all packets delivered to
    netif->output in one piece): Always copy to try to create single pbufs
    in tcp_write.

  2010-03-06: Simon Goldschmidt
  * api.h, api_lib.c, sockets.c: task #10167 (sockets: speed up TCP recv
    by not allocating a netbuf): added function netconn_recv_tcp_pbuf()
    for tcp netconns to receive pbufs, not netbufs; use that function
    for tcp sockets.

  2010-03-05: Jakob Ole Stoklundsen / Simon Goldschmidt
  * opt.h, tcp.h, tcp_impl.h, tcp.c, tcp_in.c, tcp_out.c: task #7040:
    Work on tcp_enqueue: Don't waste memory when chaining segments,
    added option TCP_OVERSIZE to prevent creating many small pbufs when
    calling tcp_write with many small blocks of data. Instead, pbufs are
    allocated larger than needed and the space is used for later calls to
    tcp_write.

  2010-02-21: Simon Goldschmidt
  * stats.c/.h: Added const char* name to mem- and memp-stats for easier
    debugging.

  2010-02-21: Simon Goldschmidt
  * tcp.h (and usages), added tcp_impl.h: Splitted API and internal
    implementation of tcp to make API usage cleare to application programmers

  2010-02-14: Simon Goldschmidt/Stephane Lesage
  * ip_addr.h: Improved some defines working on ip addresses, added faster
    macro to copy addresses that cannot be NULL

  2010-02-13: Simon Goldschmidt
  * api.h, api_lib.c, api_msg.c, sockets.c: task #7865 (implement non-
    blocking send operation)

  2010-02-12: Simon Goldschmidt
  * sockets.c/.h: Added a minimal version of posix fctl() to have a
    standardised way to set O_NONBLOCK for nonblocking sockets.

  2010-02-12: Simon Goldschmidt
  * dhcp.c/.h, autoip.c/.h: task #10139 (Prefer statically allocated
    memory): added autoip_set_struct() and dhcp_set_struct() to let autoip
    and dhcp work with user-allocated structs instead of callin mem_malloc

  2010-02-12: Simon Goldschmidt/Jeff Barber
  * tcp.c/h: patch #6865 (SO_REUSEADDR for TCP): if pcb.so_options has
    SOF_REUSEADDR set, allow binding to endpoint in TIME_WAIT

  2010-02-12: Simon Goldschmidt
  * sys layer: task #10139 (Prefer statically allocated memory): converted
    mbox and semaphore functions to take pointers to sys_mbox_t/sys_sem_t;
    converted sys_mbox_new/sys_sem_new to take pointers and return err_t;
    task #7212: Add Mutex concept in sys_arch (define LWIP_COMPAT_MUTEX
    to let sys.h use binary semaphores instead of mutexes - as before)

  2010-02-09: Simon Goldschmidt (Simon Kallweit)
  * timers.c/.h: Added function sys_restart_timeouts() from patch #7085
    (Restart system timeout handling)

  2010-02-09: Simon Goldschmidt
  * netif.c/.h, removed loopif.c/.h: task #10153 (Integrate loopif into
    netif.c) - loopif does not have to be created by the port any more,
    just define LWIP_HAVE_LOOPIF to 1.

  2010-02-08: Simon Goldschmidt
  * inet.h, ip_addr.c/.h: Added reentrant versions of inet_ntoa/ipaddr_ntoa
    inet_ntoa_r/ipaddr_ntoa_r

  2010-02-08: Simon Goldschmidt
  * netif.h: Added netif_s/get_igmp_mac_filter() macros

  2010-02-05: Simon Goldschmidt
  * netif.h: Added function-like macros to get/set the hostname on a netif

  2010-02-04: Simon Goldschmidt
  * nearly every file: Replaced struct ip_addr by typedef ip_addr_t to
    make changing the actual implementation behind the typedef easier.

  2010-02-01: Simon Goldschmidt
  * opt.h, memp_std.h, dns.h, netdb.c, memp.c: Let netdb use a memp pool
    for allocating memory when getaddrinfo() is called.

  2010-01-31: Simon Goldschmidt
  * dhcp.h, dhcp.c: Reworked the code that parses DHCP options: parse
    them once instead of parsing for every option. This also removes
    the need for mem_malloc from dhcp_recv and makes it possible to
    correctly retrieve the BOOTP file.

  2010-01-30: simon Goldschmidt
  * sockets.c: Use SYS_LIGHTWEIGHT_PROT instead of a semaphore to protect
    the sockets array.

  2010-01-29: Simon Goldschmidt (patch by Laura Garrett)
  * api.h, api_msg.c, sockets.c: Added except set support in select
    (patch #6860)

  2010-01-29: Simon Goldschmidt (patch by Laura Garrett)
  * api.h, sockets.h, err.h, api_lib.c, api_msg.c, sockets.c, err.c:
    Add non-blocking support for connect (partly from patch #6860),
    plus many cleanups in socket & netconn API.

  2010-01-27: Simon Goldschmidt
  * opt.h, tcp.h, init.c, api_msg.c: Added TCP_SNDQUEUELOWAT corresponding
    to TCP_SNDLOWAT and added tcp_sndqueuelen() - this fixes bug #28605

  2010-01-26: Simon Goldschmidt
  * snmp: Use memp pools for snmp instead of the heap; added 4 new pools.

  2010-01-14: Simon Goldschmidt
  * ppp.c/.h: Fixed bug #27856: PPP: Set netif link- and status-callback
    by adding ppp_set_netif_statuscallback()/ppp_set_netif_linkcallback()

  2010-01-13: Simon Goldschmidt
  * mem.c: The heap now may be moved to user-defined memory by defining
    LWIP_RAM_HEAP_POINTER as a void pointer to that memory's address
    (patch #6966 and bug #26133)

  2010-01-10: Simon Goldschmidt (Bill Auerbach)
  * opt.h, memp.c: patch #6822 (Add option to place memory pools in
    separate arrays)

  2010-01-10: Simon Goldschmidt
  * init.c, igmp.c: patch #6463 (IGMP - Adding Random Delay): added define
    LWIP_RAND() for lwip-wide randomization (to be defined in cc.h)

  2009-12-31: Simon Goldschmidt
  * tcpip.c, init.c, memp.c, sys.c, memp_std.h, sys.h, tcpip.h
    added timers.c/.h: Separated timer implementation from semaphore/mbox
    implementation, moved timer implementation to timers.c/.h, timers are
    now only called from tcpip_thread or by explicitly checking them.
    (TASK#7235)

  2009-12-27: Simon Goldschmidt
  * opt.h, etharp.h/.c, init.c, tcpip.c: Added an additional option
    LWIP_ETHERNET to support ethernet without ARP (necessary for pure PPPoE)


  ++ Bugfixes:

  2011-04-20: Simon Goldschmidt
  * sys_arch.txt: sys_arch_timeouts() is not needed any more.

  2011-04-13: Simon Goldschmidt
  * tcp.c, udp.c: Fixed bug #33048 (Bad range for IP source port numbers) by
    using ports in the IANA private/dynamic range (49152 through 65535).

  2011-03-29: Simon Goldschmidt, patch by Emil Lhungdahl:
  * etharp.h/.c: Fixed broken VLAN support.

  2011-03-27: Simon Goldschmidt
  * tcp.c: Fixed bug #32926 (TCP_RMV(&tcp_bound_pcbs) is called on unbound tcp
    pcbs) by checking if the pcb was bound (local_port != 0).

  2011-03-27: Simon Goldschmidt
  * ppp.c: Fixed bug #32280 (ppp: a pbuf is freed twice)

  2011-03-27: Simon Goldschmidt
  * sockets.c: Fixed bug #32906: lwip_connect+lwip_send did not work for udp and
    raw pcbs with LWIP_TCPIP_CORE_LOCKING==1.
  
  2011-03-27: Simon Goldschmidt
  * tcp_out.c: Fixed bug #32820 (Outgoing TCP connections created before route
    is present never times out) by starting retransmission timer before checking
    route.

  2011-03-22: Simon Goldschmidt
  * ppp.c: Fixed bug #32648 (PPP code crashes when terminating a link) by only
    calling sio_read_abort() if the file descriptor is valid.

  2011-03-14: Simon Goldschmidt
  * err.h/.c, sockets.c, api_msg.c: fixed bug #31748 (Calling non-blocking connect
    more than once can render a socket useless) since it mainly involves changing
    "FATAL" classification of error codes: ERR_USE and ERR_ISCONN just aren't fatal.

  2011-03-13: Simon Goldschmidt
  * sockets.c: fixed bug #32769 (ESHUTDOWN is linux-specific) by fixing
    err_to_errno_table (ERR_CLSD: ENOTCONN instead of ESHUTDOWN), ERR_ISCONN:
    use EALRADY instead of -1

  2011-03-13: Simon Goldschmidt
  * api_lib.c: netconn_accept: return ERR_ABRT instead of ERR_CLSD if the
    connection has been aborted by err_tcp (since this is not a normal closing
    procedure).

  2011-03-13: Simon Goldschmidt
  * tcp.c: tcp_bind: return ERR_VAL instead of ERR_ISCONN when trying to bind
    with pcb->state != CLOSED

  2011-02-17: Simon Goldschmidt
  * rawapi.txt: Fixed bug #32561 tcp_poll argument definition out-of-order in
    documentation

  2011-02-17: Simon Goldschmidt
  * many files: Added missing U/UL modifiers to fix 16-bit-arch portability.

  2011-01-24: Simon Goldschmidt
  * sockets.c: Fixed bug #31741: lwip_select seems to have threading problems

  2010-12-02: Simon Goldschmidt
  * err.h: Fixed ERR_IS_FATAL so that ERR_WOULDBLOCK is not fatal.

  2010-11-23: Simon Goldschmidt
  * api.h, api_lib.c, api_msg.c, sockets.c: netconn.recv_avail is only used for
    LWIP_SO_RCVBUF and ioctl/FIONREAD.

  2010-11-23: Simon Goldschmidt
  * etharp.c: Fixed bug #31720: ARP-queueing: RFC 1122 recommends to queue at
    least 1 packet -> ARP_QUEUEING==0 now queues the most recent packet.

  2010-11-23: Simon Goldschmidt
  * tcp_in.c: Fixed bug #30577: tcp_input: don't discard ACK-only packets after
    refusing 'refused_data' again.
  
  2010-11-22: Simon Goldschmidt
  * sockets.c: Fixed bug #31590: getsockopt(... SO_ERROR ...) gives EINPROGRESS
    after a successful nonblocking connection.

  2010-11-22: Simon Goldschmidt
  * etharp.c: Fixed bug #31722: IP packets sent with an AutoIP source addr
    must be sent link-local

  2010-11-22: Simon Goldschmidt
  * timers.c: patch #7329: tcp_timer_needed prototype was ifdef'ed out for
    LWIP_TIMERS==0

  2010-11-20: Simon Goldschmidt
  * sockets.c: Fixed bug #31170: lwip_setsockopt() does not set socket number

  2010-11-20: Simon Goldschmidt
  * sockets.h: Fixed bug #31304: Changed SHUT_RD, SHUT_WR and SHUT_RDWR to
    resemble other stacks.

  2010-11-20: Simon Goldschmidt
  * dns.c: Fixed bug #31535: TCP_SND_QUEUELEN must be at least 2 or else
    no-copy TCP writes will never succeed.

  2010-11-20: Simon Goldschmidt
  * dns.c: Fixed bug #31701: Error return value from dns_gethostbyname() does
    not match documentation: return ERR_ARG instead of ERR_VAL if not
    initialized or wrong argument.

  2010-10-20: Simon Goldschmidt
  * sockets.h: Fixed bug #31385: sizeof(struct sockaddr) is 30 but should be 16

  2010-10-05: Simon Goldschmidt
  * dhcp.c: Once again fixed #30038: DHCP/AutoIP cooperation failed when
    replugging the network cable after an AutoIP address was assigned.

  2010-08-10: Simon Goldschmidt
  * tcp.c: Fixed bug #30728: tcp_new_port() did not check listen pcbs

  2010-08-03: Simon Goldschmidt
  * udp.c, raw.c: Don't chain empty pbufs when sending them (fixes bug #30625)

  2010-08-01: Simon Goldschmidt (patch by Greg Renda)
  * ppp.c: Applied patch #7264 (PPP protocols are rejected incorrectly on big
    endian architectures)
  
  2010-07-28: Simon Goldschmidt
  * api_lib.c, api_msg.c, sockets.c, mib2.c: Fixed compilation with TCP or UDP
    disabled.
  
  2010-07-27: Simon Goldschmidt
  * tcp.c: Fixed bug #30565 (tcp_connect() check bound list): that check did no
    harm but never did anything
  
  2010-07-21: Simon Goldschmidt
  * ip.c: Fixed invalid fix for bug #30402 (CHECKSUM_GEN_IP_INLINE does not
    add IP options)

  2010-07-16: Kieran Mansley
  * msg_in.c: Fixed SNMP ASN constant defines to not use ! operator 

  2010-07-10: Simon Goldschmidt
  * ip.c: Fixed bug #30402: CHECKSUM_GEN_IP_INLINE does not add IP options

  2010-06-30: Simon Goldschmidt
  * api_msg.c: fixed bug #30300 (shutdown parameter was not initialized in
    netconn_delete)

  2010-06-28: Kieran Mansley
  * timers.c remove unportable printing of C function pointers

  2010-06-24: Simon Goldschmidt
  * init.c, timers.c/.h, opt.h, memp_std.h: From patch #7221: added flag
    NO_SYS_NO_TIMERS to drop timer support for NO_SYS==1 for easier upgrading

  2010-06-24: Simon Goldschmidt
  * api(_lib).c/.h, api_msg.c/.h, sockets.c/.h: Fixed bug #10088: Correctly
    implemented shutdown at socket level.

  2010-06-21: Simon Goldschmidt
  * pbuf.c/.h, ip_frag.c/.h, opt.h, memp_std.h: Fixed bug #29361 (ip_frag has
    problems with zero-copy DMA MACs) by adding custom pbufs and implementing
    custom pbufs that reference other (original) pbufs. Additionally set
    IP_FRAG_USES_STATIC_BUF=0 as default to be on the safe side.

  2010-06-15: Simon Goldschmidt
  * dhcp.c: Fixed bug #29970: DHCP endian issue parsing option responses

  2010-06-14: Simon Goldschmidt
  * autoip.c: Fixed bug #30039: AutoIP does not reuse previous addresses

  2010-06-12: Simon Goldschmidt
  * dhcp.c: Fixed bug #30038: dhcp_network_changed doesn't reset AUTOIP coop
    state

  2010-05-17: Simon Goldschmidt
  * netdb.c: Correctly NULL-terminate h_addr_list

  2010-05-16: Simon Goldschmidt
  * def.h/.c: changed the semantics of LWIP_PREFIX_BYTEORDER_FUNCS to prevent
    "symbol already defined" i.e. when linking to winsock

  2010-05-05: Simon Goldschmidt
  * def.h, timers.c: Fixed bug #29769 (sys_check_timeouts: sys_now() may
    overflow)

  2010-04-21: Simon Goldschmidt
  * api_msg.c: Fixed bug #29617 (sometime cause stall on delete listening
    connection)

  2010-03-28: Luca Ceresoli
  * ip_addr.c/.h: patch #7143: Add a few missing const qualifiers

  2010-03-27: Luca Ceresoli
  * mib2.c: patch #7130: remove meaningless const qualifiers

  2010-03-26: Simon Goldschmidt
  * tcp_out.c: Make LWIP_NETIF_TX_SINGLE_PBUF work for TCP, too

  2010-03-26: Simon Goldschmidt
  * various files: Fixed compiling with different options disabled (TCP/UDP),
    triggered by bug #29345; don't allocate acceptmbox if LWIP_TCP is disabled

  2010-03-25: Simon Goldschmidt
  * sockets.c: Fixed bug #29332: lwip_select() processes readset incorrectly

  2010-03-25: Simon Goldschmidt
  * tcp_in.c, test_tcp_oos.c: Fixed bug #29080: Correctly handle remote side
    overrunning our rcv_wnd in ooseq case.

  2010-03-22: Simon Goldschmidt
  * tcp.c: tcp_listen() did not copy the pcb's prio.

  2010-03-19: Simon Goldschmidt
  * snmp_msg.c: Fixed bug #29256: SNMP Trap address was not correctly set

  2010-03-14: Simon Goldschmidt
  * opt.h, etharp.h: Fixed bug #29148 (Incorrect PBUF_POOL_BUFSIZE for ports
    where ETH_PAD_SIZE > 0) by moving definition of ETH_PAD_SIZE to opt.h
    and basing PBUF_LINK_HLEN on it.

  2010-03-08: Simon Goldschmidt
  * netif.c, ipv4/ip.c: task #10241 (AutoIP: don't break existing connections
    when assiging routable address): when checking incoming packets and
    aborting existing connection on address change, filter out link-local
    addresses.

  2010-03-06: Simon Goldschmidt
  * sockets.c: Fixed LWIP_NETIF_TX_SINGLE_PBUF for LWIP_TCPIP_CORE_LOCKING

  2010-03-06: Simon Goldschmidt
  * ipv4/ip.c: Don't try to forward link-local addresses

  2010-03-06: Simon Goldschmidt
  * etharp.c: Fixed bug #29087: etharp: don't send packets for LinkLocal-
    addresses to gw

  2010-03-05: Simon Goldschmidt
  * dhcp.c: Fixed bug #29072: Correctly set ciaddr based on message-type
    and state.

  2010-03-05: Simon Goldschmidt
  * api_msg.c: Correctly set TCP_WRITE_FLAG_MORE when netconn_write is split
    into multiple calls to tcp_write.    

  2010-02-21: Simon Goldschmidt
  * opt.h, mem.h, dns.c: task #10140: Remove DNS_USES_STATIC_BUF (keep
    the implementation of DNS_USES_STATIC_BUF==1)

  2010-02-20: Simon Goldschmidt
  * tcp.h, tcp.c, tcp_in.c, tcp_out.c: Task #10088: Correctly implement
    close() vs. shutdown(). Now the application does not get any more
    recv callbacks after calling tcp_close(). Added tcp_shutdown().

  2010-02-19: Simon Goldschmidt
  * mem.c/.h, pbuf.c: Renamed mem_realloc() to mem_trim() to prevent
    confusion with realloc()

  2010-02-15: Simon Goldschmidt/Stephane Lesage
  * netif.c/.h: Link status does not depend on LWIP_NETIF_LINK_CALLBACK
    (fixes bug #28899)

  2010-02-14: Simon Goldschmidt
  * netif.c: Fixed bug #28877 (Duplicate ARP gratuitous packet with
    LWIP_NETIF_LINK_CALLBACK set on) by only sending if both link- and
    admin-status of a netif are up

  2010-02-14: Simon Goldschmidt
  * opt.h: Disable ETHARP_TRUST_IP_MAC by default since it slows down packet
    reception and is not really necessary

  2010-02-14: Simon Goldschmidt
  * etharp.c/.h: Fixed ARP input processing: only add a new entry if a
    request was directed as us (RFC 826, Packet Reception), otherwise
    only update existing entries; internalized some functions

  2010-02-14: Simon Goldschmidt
  * netif.h, etharp.c, tcpip.c: Fixed bug #28183 (ARP and TCP/IP cannot be
    disabled on netif used for PPPoE) by adding a new netif flag
    (NETIF_FLAG_ETHERNET) that tells the stack the device is an ethernet
    device but prevents usage of ARP (so that ethernet_input can be used
    for PPPoE).

  2010-02-12: Simon Goldschmidt
  * netif.c: netif_set_link_up/down: only do something if the link state
    actually changes

  2010-02-12: Simon Goldschmidt/Stephane Lesage
  * api_msg.c: Fixed bug #28865 (Cannot close socket/netconn in non-blocking
    connect)

  2010-02-12: Simon Goldschmidt
  * mem.h: Fixed bug #28866 (mem_realloc function defined in mem.h)

  2010-02-09: Simon Goldschmidt
  * api_lib.c, api_msg.c, sockets.c, api.h, api_msg.h: Fixed bug #22110
   (recv() makes receive window update for data that wasn't received by
    application)

  2010-02-09: Simon Goldschmidt/Stephane Lesage
  * sockets.c: Fixed bug #28853 (lwip_recvfrom() returns 0 on receive time-out
    or any netconn_recv() error)

  2010-02-09: Simon Goldschmidt
  * ppp.c: task #10154 (PPP: Update snmp in/out counters for tx/rx packets)

  2010-02-09: Simon Goldschmidt
  * netif.c: For loopback packets, adjust the stats- and snmp-counters
    for the loopback netif.

  2010-02-08: Simon Goldschmidt
  * igmp.c/.h, ip.h: Moved most defines from igmp.h to igmp.c for clarity
    since they are not used anywhere else.

  2010-02-08: Simon Goldschmidt (Stéphane Lesage)
  * igmp.c, igmp.h, stats.c, stats.h: Improved IGMP stats
    (patch from bug #28798)

  2010-02-08: Simon Goldschmidt (Stéphane Lesage)
  * igmp.c: Fixed bug #28798 (Error in "Max Response Time" processing) and
    another bug when LWIP_RAND() returns zero.

  2010-02-04: Simon Goldschmidt
  * nearly every file: Use macros defined in ip_addr.h (some of them new)
    to work with IP addresses (preparation for bug #27352 - Change ip_addr
    from struct to typedef (u32_t) - and better code).

  2010-01-31: Simon Goldschmidt
  * netif.c: Don't call the link-callback from netif_set_up/down() since
    this invalidly retriggers DHCP.

  2010-01-29: Simon Goldschmidt
  * ip_addr.h, inet.h, def.h, inet.c, def.c, more: Cleanly separate the
    portability file inet.h and its contents from the stack: moved htonX-
    functions to def.h (and the new def.c - they are not ipv4 dependent),
    let inet.h depend on ip_addr.h and not the other way round.
    This fixes bug #28732.

  2010-01-28: Kieran Mansley
  * tcp.c: Ensure ssthresh >= 2*MSS

  2010-01-27: Simon Goldschmidt
  * tcp.h, tcp.c, tcp_in.c: Fixed bug #27871: Calling tcp_abort() in recv
    callback can lead to accessing unallocated memory. As a consequence,
    ERR_ABRT means the application has called tcp_abort()!

  2010-01-25: Simon Goldschmidt
  * snmp_structs.h, msg_in.c: Partly fixed bug #22070 (MIB_OBJECT_WRITE_ONLY
    not implemented in SNMP): write-only or not-accessible are still
    returned by getnext (though not by get)

  2010-01-24: Simon Goldschmidt
  * snmp: Renamed the private mib node from 'private' to 'mib_private' to
    not use reserved C/C++ keywords

  2010-01-23: Simon Goldschmidt
  * sockets.c: Fixed bug #28716: select() returns 0 after waiting for less
    than 1 ms

  2010-01-21: Simon Goldschmidt
  * tcp.c, api_msg.c: Fixed bug #28651 (tcp_connect: no callbacks called
    if tcp_enqueue fails) both in raw- and netconn-API

  2010-01-19: Simon Goldschmidt
  * api_msg.c: Fixed bug #27316: netconn: Possible deadlock in err_tcp

  2010-01-18: Iordan Neshev/Simon Goldschmidt
  * src/netif/ppp: reorganised PPP sourcecode to 2.3.11 including some
    bugfix backports from 2.4.x.

  2010-01-18: Simon Goldschmidt
  * mem.c: Fixed bug #28679: mem_realloc calculates mem_stats wrong

  2010-01-17: Simon Goldschmidt
  * api_lib.c, api_msg.c, (api_msg.h, api.h, sockets.c, tcpip.c):
    task #10102: "netconn: clean up conn->err threading issues" by adding
    error return value to struct api_msg_msg

  2010-01-17: Simon Goldschmidt
  * api.h, api_lib.c, sockets.c: Changed netconn_recv() and netconn_accept()
    to return err_t (bugs #27709 and #28087)

  2010-01-14: Simon Goldschmidt
  * ...: Use typedef for function prototypes throughout the stack.

  2010-01-13: Simon Goldschmidt
  * api_msg.h/.c, api_lib.c: Fixed bug #26672 (close connection when receive
    window = 0) by correctly draining recvmbox/acceptmbox

  2010-01-11: Simon Goldschmidt
  * pap.c: Fixed bug #13315 (PPP PAP authentication can result in
    erroneous callbacks) by copying the code from recent pppd

  2010-01-10: Simon Goldschmidt
  * raw.c: Fixed bug #28506 (raw_bind should filter received packets)

  2010-01-10: Simon Goldschmidt
  * tcp.h/.c: bug #28127 (remove call to tcp_output() from tcp_ack(_now)())

  2010-01-08: Simon Goldschmidt
  * sockets.c: Fixed bug #28519 (lwip_recvfrom bug with len > 65535)

  2010-01-08: Simon Goldschmidt
  * dns.c: Copy hostname for DNS_LOCAL_HOSTLIST_IS_DYNAMIC==1 since string
    passed to dns_local_addhost() might be volatile

  2010-01-07: Simon Goldschmidt
  * timers.c, tcp.h: Call tcp_timer_needed() with NO_SYS==1, too

  2010-01-06: Simon Goldschmidt
  * netdb.h: Fixed bug #28496: missing include guards in netdb.h

  2009-12-31: Simon Goldschmidt
  * many ppp files: Reorganised PPP source code from ucip structure to pppd
    structure to easily compare our code against the pppd code (around v2.3.1)

  2009-12-27: Simon Goldschmidt
  * tcp_in.c: Another fix for bug #28241 (ooseq processing) and adapted
    unit test


(STABLE-1.3.2)

  ++ New features:

  2009-10-27 Simon Goldschmidt/Stephan Lesage
  * netifapi.c/.h: Added netifapi_netif_set_addr()

  2009-10-07 Simon Goldschmidt/Fabian Koch
  * api_msg.c, netbuf.c/.h, opt.h: patch #6888: Patch for UDP Netbufs to
    support dest-addr and dest-port (optional: LWIP_NETBUF_RECVINFO)

  2009-08-26 Simon Goldschmidt/Simon Kallweit
  * slipif.c/.h: bug #26397: SLIP polling support

  2009-08-25 Simon Goldschmidt
  * opt.h, etharp.h/.c: task #9033: Support IEEE 802.1q tagged frame (VLAN),
    New configuration options ETHARP_SUPPORT_VLAN and ETHARP_VLAN_CHECK.

  2009-08-25 Simon Goldschmidt
  * ip_addr.h, netdb.c: patch #6900: added define ip_ntoa(struct ip_addr*)

  2009-08-24 Jakob Stoklund Olesen
  * autoip.c, dhcp.c, netif.c: patch #6725: Teach AutoIP and DHCP to respond
    to netif_set_link_up().

  2009-08-23 Simon Goldschmidt
  * tcp.h/.c: Added function tcp_debug_state_str() to convert a tcp state
    to a human-readable string.

  ++ Bugfixes:

  2009-12-24: Kieran Mansley
  * tcp_in.c Apply patches from Oleg Tyshev to improve OOS processing
    (BUG#28241)

  2009-12-06: Simon Goldschmidt
  * ppp.h/.c: Fixed bug #27079 (Yet another leak in PPP): outpacket_buf can
    be statically allocated (like in ucip)

  2009-12-04: Simon Goldschmidt (patch by Ioardan Neshev)
  * pap.c: patch #6969: PPP: missing PAP authentication UNTIMEOUT

  2009-12-03: Simon Goldschmidt
  * tcp.h, tcp_in.c, tcp_out.c: Fixed bug #28106: dup ack for fast retransmit
    could have non-zero length

  2009-12-02: Simon Goldschmidt
  * tcp_in.c: Fixed bug #27904: TCP sends too many ACKs: delay resetting
    tcp_input_pcb until after calling the pcb's callbacks

  2009-11-29: Simon Goldschmidt
  * tcp_in.c: Fixed bug #28054: Two segments with FIN flag on the out-of-
    sequence queue, also fixed PBUF_POOL leak in the out-of-sequence code

  2009-11-29: Simon Goldschmidt
  * pbuf.c: Fixed bug #28064: pbuf_alloc(PBUF_POOL) is not thread-safe by
    queueing a call into tcpip_thread to free ooseq-bufs if the pool is empty

  2009-11-26: Simon Goldschmidt
  * tcp.h: Fixed bug #28098: Nagle can prevent fast retransmit from sending
    segment

  2009-11-26: Simon Goldschmidt
  * tcp.h, sockets.c: Fixed bug #28099: API required to disable Nagle
    algorithm at PCB level

  2009-11-22: Simon Goldschmidt
  * tcp_out.c: Fixed bug #27905: FIN isn't combined with data on unsent

  2009-11-22: Simon Goldschmidt (suggested by Bill Auerbach)
  * tcp.c: tcp_alloc: prevent increasing stats.err for MEMP_TCP_PCB when
    reusing time-wait pcb

  2009-11-20: Simon Goldschmidt (patch by Albert Bartel)
  * sockets.c: Fixed bug #28062: Data received directly after accepting
    does not wake up select

  2009-11-11: Simon Goldschmidt
  * netdb.h: Fixed bug #27994: incorrect define for freeaddrinfo(addrinfo)

  2009-10-30: Simon Goldschmidt
  * opt.h: Increased default value for TCP_MSS to 536, updated default
    value for TCP_WND to 4*TCP_MSS to keep delayed ACK working.

  2009-10-28: Kieran Mansley
  * tcp_in.c, tcp_out.c, tcp.h: re-work the fast retransmission code
    to follow algorithm from TCP/IP Illustrated

  2009-10-27: Kieran Mansley
  * tcp_in.c: fix BUG#27445: grow cwnd with every duplicate ACK

  2009-10-25: Simon Goldschmidt
  * tcp.h: bug-fix in the TCP_EVENT_RECV macro (has to call tcp_recved if
    pcb->recv is NULL to keep rcv_wnd correct)

  2009-10-25: Simon Goldschmidt
  * tcp_in.c: Fixed bug #26251: RST process in TIME_WAIT TCP state

  2009-10-23: Simon Goldschmidt (David Empson)
  * tcp.c: Fixed bug #27783: Silly window avoidance for small window sizes

  2009-10-21: Simon Goldschmidt
  * tcp_in.c: Fixed bug #27215: TCP sent() callback gives leading and
    trailing 1 byte len (SYN/FIN)

  2009-10-21: Simon Goldschmidt
  * tcp_out.c: Fixed bug #27315: zero window probe and FIN

  2009-10-19: Simon Goldschmidt
  * dhcp.c/.h: Minor code simplification (don't store received pbuf, change
    conditional code to assert where applicable), check pbuf length before
    testing for valid reply

  2009-10-19: Simon Goldschmidt
  * dhcp.c: Removed most calls to udp_connect since they aren't necessary
    when using udp_sendto_if() - always stay connected to IP_ADDR_ANY.

  2009-10-16: Simon Goldschmidt
  * ip.c: Fixed bug #27390: Source IP check in ip_input() causes it to drop
    valid DHCP packets -> allow 0.0.0.0 as source address when LWIP_DHCP is
    enabled

  2009-10-15: Simon Goldschmidt (Oleg Tyshev)
  * tcp_in.c: Fixed bug #27329: dupacks by unidirectional data transmit

  2009-10-15: Simon Goldschmidt
  * api_lib.c: Fixed bug #27709: conn->err race condition on netconn_recv()
    timeout

  2009-10-15: Simon Goldschmidt
  * autoip.c: Fixed bug #27704: autoip starts with wrong address
    LWIP_AUTOIP_CREATE_SEED_ADDR() returned address in host byte order instead
    of network byte order

  2009-10-11 Simon Goldschmidt (Jörg Kesten)
  * tcp_out.c: Fixed bug #27504: tcp_enqueue wrongly concatenates segments
    which are not consecutive when retransmitting unacked segments

  2009-10-09 Simon Goldschmidt
  * opt.h: Fixed default values of some stats to only be enabled if used
    Fixes bug #27338: sys_stats is defined when NO_SYS = 1

  2009-08-30 Simon Goldschmidt
  * ip.c: Fixed bug bug #27345: "ip_frag() does not use the LWIP_NETIF_LOOPBACK
    function" by checking for loopback before calling ip_frag

  2009-08-25 Simon Goldschmidt
  * dhcp.c: fixed invalid dependency to etharp_query if DHCP_DOES_ARP_CHECK==0

  2009-08-23 Simon Goldschmidt
  * ppp.c: bug #27078: Possible memory leak in pppInit()

  2009-08-23 Simon Goldschmidt
  * netdb.c, dns.c: bug #26657: DNS, if host name is "localhost", result
    is error.

  2009-08-23 Simon Goldschmidt
  * opt.h, init.c: bug #26649: TCP fails when TCP_MSS > TCP_SND_BUF
    Fixed wrong parenthesis, added check in init.c

  2009-08-23 Simon Goldschmidt
  * ppp.c: bug #27266: wait-state debug message in pppMain occurs every ms

  2009-08-23 Simon Goldschmidt
  * many ppp files: bug #27267: Added include to string.h where needed

  2009-08-23 Simon Goldschmidt
  * tcp.h: patch #6843: tcp.h macro optimization patch (for little endian)


(STABLE-1.3.1)

  ++ New features:

  2009-05-10 Simon Goldschmidt
  * opt.h, sockets.c, pbuf.c, netbuf.h, pbuf.h: task #7013: Added option
    LWIP_NETIF_TX_SINGLE_PBUF to try to create transmit packets from only
    one pbuf to help MACs that don't support scatter-gather DMA.

  2009-05-09 Simon Goldschmidt
  * icmp.h, icmp.c: Shrinked ICMP code, added option to NOT check icoming
    ECHO pbuf for size (just use it): LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN

  2009-05-05 Simon Goldschmidt, Jakob Stoklund Olesen
  * ip.h, ip.c: Added ip_current_netif() & ip_current_header() to receive
    extended info about the currently received packet.

  2009-04-27 Simon Goldschmidt
  * sys.h: Made SYS_LIGHTWEIGHT_PROT and sys_now() work with NO_SYS=1

  2009-04-25 Simon Goldschmidt
  * mem.c, opt.h: Added option MEM_USE_POOLS_TRY_BIGGER_POOL to try the next
    bigger malloc pool if one is empty (only usable with MEM_USE_POOLS).

  2009-04-21 Simon Goldschmidt
  * dns.c, init.c, dns.h, opt.h: task #7507, patch #6786: DNS supports static
    hosts table. New configuration options DNS_LOCAL_HOSTLIST and
    DNS_LOCAL_HOSTLIST_IS_DYNAMIC. Also, DNS_LOOKUP_LOCAL_EXTERN() can be defined
    as an external function for lookup.

  2009-04-15 Simon Goldschmidt
  * dhcp.c: patch #6763: Global DHCP XID can be redefined to something more unique

  2009-03-31 Kieran Mansley
  * tcp.c, tcp_out.c, tcp_in.c, sys.h, tcp.h, opts.h: add support for
    TCP timestamp options, off by default.  Rework tcp_enqueue() to
    take option flags rather than specified option data

  2009-02-18 Simon Goldschmidt
  * cc.h: Added printf formatter for size_t: SZT_F

  2009-02-16 Simon Goldschmidt (patch by Rishi Khan)
  * icmp.c, opt.h: patch #6539: (configurable) response to broadcast- and multicast
    pings

  2009-02-12 Simon Goldschmidt
  * init.h: Added LWIP_VERSION to get the current version of the stack

  2009-02-11 Simon Goldschmidt (suggested by Gottfried Spitaler)
  * opt.h, memp.h/.c: added MEMP_MEM_MALLOC to use mem_malloc/mem_free instead
    of the pool allocator (can save code size with MEM_LIBC_MALLOC if libc-malloc
    is otherwise used)

  2009-01-28 Jonathan Larmour (suggested by Bill Bauerbach)
  * ipv4/inet_chksum.c, ipv4/lwip/inet_chksum.h: inet_chksum_pseudo_partial()
  is only used by UDPLITE at present, so conditionalise it.

  2008-12-03 Simon Goldschmidt (base on patch from Luca Ceresoli)
  * autoip.c: checked in (slightly modified) patch #6683: Customizable AUTOIP
    "seed" address. This should reduce AUTOIP conflicts if
    LWIP_AUTOIP_CREATE_SEED_ADDR is overridden.

  2008-10-02 Jonathan Larmour and Rishi Khan
  * sockets.c (lwip_accept): Return EWOULDBLOCK if would block on non-blocking
    socket.

  2008-06-30 Simon Goldschmidt
  * mem.c, opt.h, stats.h: fixed bug #21433: Calling mem_free/pbuf_free from
    interrupt context isn't safe: LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT allows
    mem_free to run between mem_malloc iterations. Added illegal counter for
    mem stats.

  2008-06-27 Simon Goldschmidt
  * stats.h/.c, some other files: patch #6483: stats module improvement:
    Added defines to display each module's statistic individually, added stats
    defines for MEM, MEMP and SYS modules, removed (unused) rexmit counter.

  2008-06-17 Simon Goldschmidt
  * err.h: patch #6459: Made err_t overridable to use a more efficient type
    (define LWIP_ERR_T in cc.h)

  2008-06-17 Simon Goldschmidt
  * slipif.c: patch #6480: Added a configuration option for slipif for symmetry
    to loopif

  2008-06-17 Simon Goldschmidt (patch by Luca Ceresoli)
  * netif.c, loopif.c, ip.c, netif.h, loopif.h, opt.h: Checked in slightly
    modified version of patch # 6370: Moved loopif code to netif.c so that
    loopback traffic is supported on all netifs (all local IPs).
    Added option to limit loopback packets for each netifs.


  ++ Bugfixes:
  2009-08-12 Kieran Mansley
  * tcp_in.c, tcp.c: Fix bug #27209: handle trimming of segments when
    out of window or out of order properly

  2009-08-12 Kieran Mansley
  * tcp_in.c: Fix bug #27199: use snd_wl2 instead of snd_wl1

  2009-07-28 Simon Goldschmidt
  * mem.h: Fixed bug #27105: "realloc() cannot replace mem_realloc()"s

  2009-07-27 Kieran Mansley
  * api.h api_msg.h netdb.h sockets.h: add missing #include directives

  2009-07-09 Kieran Mansley
  * api_msg.c, sockets.c, api.h: BUG23240 use signed counters for
    recv_avail and don't increment counters until message successfully
    sent to mbox

  2009-06-25 Kieran Mansley
  * api_msg.c api.h: BUG26722: initialise netconn write variables 
    in netconn_alloc

  2009-06-25 Kieran Mansley
  * tcp.h: BUG26879: set ret value in TCP_EVENT macros when function is not set

  2009-06-25 Kieran Mansley
  * tcp.c, tcp_in.c, tcp_out.c, tcp.h: BUG26301 and BUG26267: correct
    simultaneous close behaviour, and make snd_nxt have the same meaning 
    as in the RFCs.

  2009-05-12 Simon Goldschmidt
  * etharp.h, etharp.c, netif.c: fixed bug #26507: "Gratuitous ARP depends on
    arp_table / uses etharp_query" by adding etharp_gratuitous()

  2009-05-12 Simon Goldschmidt
  * ip.h, ip.c, igmp.c: bug #26487: Added ip_output_if_opt that can add IP options
    to the IP header (used by igmp_ip_output_if)

  2009-05-06 Simon Goldschmidt
  * inet_chksum.c: On little endian architectures, use LWIP_PLATFORM_HTONS (if
    defined) for SWAP_BYTES_IN_WORD to speed up checksumming.

  2009-05-05 Simon Goldschmidt
  * sockets.c: bug #26405: Prematurely released semaphore causes lwip_select()
    to crash

  2009-05-04 Simon Goldschmidt
  * init.c: snmp was not initialized in lwip_init()

  2009-05-04 Frédéric Bernon
  * dhcp.c, netbios.c: Changes if IP_SOF_BROADCAST is enabled.

  2009-05-03 Simon Goldschmidt
  * tcp.h: bug #26349: Nagle algorithm doesn't send although segment is full
    (and unsent->next == NULL)

  2009-05-02 Simon Goldschmidt
  * tcpip.h, tcpip.c: fixed tcpip_untimeout (does not need the time, broken after
    1.3.0 in CVS only) - fixes compilation of ppp_oe.c

  2009-05-02 Simon Goldschmidt
  * msg_in.c: fixed bug #25636: SNMPSET value is ignored for integer fields

  2009-05-01 Simon Goldschmidt
  * pap.c: bug #21680: PPP upap_rauthnak() drops legal NAK packets

  2009-05-01 Simon Goldschmidt
  * ppp.c: bug #24228: Memory corruption with PPP and DHCP

  2009-04-29 Frédéric Bernon
  * raw.c, udp.c, init.c, opt.h, ip.h, sockets.h: bug #26309: Implement the
    SO(F)_BROADCAST filter for all API layers. Avoid the unindented reception
    of broadcast packets even when this option wasn't set. Port maintainers
    which want to enable this filter have to set IP_SOF_BROADCAST=1 in opt.h.
    If you want this option also filter broadcast on recv operations, you also
    have to set IP_SOF_BROADCAST_RECV=1 in opt.h.

  2009-04-28 Simon Goldschmidt, Jakob Stoklund Olesen
  * dhcp.c: patch #6721, bugs #25575, #25576: Some small fixes to DHCP and
    DHCP/AUTOIP cooperation

  2009-04-25 Simon Goldschmidt, Oleg Tyshev
  * tcp_out.c: bug #24212: Deadlocked tcp_retransmit due to exceeded pcb->cwnd
    Fixed by sorting the unsent and unacked queues (segments are inserted at the
    right place in tcp_output and tcp_rexmit).

  2009-04-25 Simon Goldschmidt
  * memp.c, mem.c, memp.h, mem_std.h: bug #26213 "Problem with memory allocation
    when debugging": memp_sizes contained the wrong sizes (including sanity
    regions); memp pools for MEM_USE_POOLS were too small

  2009-04-24 Simon Goldschmidt, Frédéric Bernon
  * inet.c: patch #6765: Fix a small problem with the last changes (incorrect
    behavior, with with ip address string not ended by a '\0', a space or a
    end of line)

  2009-04-19 Simon Goldschmidt
  * rawapi.txt: Fixed bug #26069: Corrected documentation: if tcp_connect fails,
    pcb->err is called, not pcb->connected (with an error code).

  2009-04-19 Simon Goldschmidt
  * tcp_out.c: Fixed bug #26236: "TCP options (timestamp) don't work with
    no-copy-tcpwrite": deallocate option data, only concat segments with same flags

  2009-04-19 Simon Goldschmidt
  * tcp_out.c: Fixed bug #25094: "Zero-length pbuf" (options are now allocated
    in the header pbuf, not the data pbuf)

  2009-04-18 Simon Goldschmidt
  * api_msg.c: fixed bug #25695: Segmentation fault in do_writemore()

  2009-04-15 Simon Goldschmidt
  * sockets.c: tried to fix bug #23559: lwip_recvfrom problem with tcp

  2009-04-15 Simon Goldschmidt
  * dhcp.c: task #9192: mem_free of dhcp->options_in and dhcp->msg_in

  2009-04-15 Simon Goldschmidt
  * ip.c, ip6.c, tcp_out.c, ip.h: patch #6808: Add a utility function
    ip_hinted_output() (for smaller code mainly)

  2009-04-15 Simon Goldschmidt
  * inet.c: patch #6765: Supporting new line characters in inet_aton()

  2009-04-15 Simon Goldschmidt
  * dhcp.c: patch #6764: DHCP rebind and renew did not send hostnam option;
    Converted constant OPTION_MAX_MSG_SIZE to netif->mtu, check if netif->mtu
    is big enough in dhcp_start

  2009-04-15 Simon Goldschmidt
  * netbuf.c: bug #26027: netbuf_chain resulted in pbuf memory leak

  2009-04-15 Simon Goldschmidt
  * sockets.c, ppp.c: bug #25763: corrected 4 occurrences of SMEMCPY to MEMCPY

  2009-04-15 Simon Goldschmidt
  * sockets.c: bug #26121: set_errno can be overridden

  2009-04-09 Kieran Mansley (patch from Luca Ceresoli <lucaceresoli>)
  * init.c, opt.h: Patch#6774 TCP_QUEUE_OOSEQ breaks compilation when
    LWIP_TCP==0

  2009-04-09 Kieran Mansley (patch from Roy Lee <roylee17>)
  * tcp.h: Patch#6802 Add do-while-clauses to those function like
    macros in tcp.h

  2009-03-31 Kieran Mansley
  * tcp.c, tcp_in.c, tcp_out.c, tcp.h, opt.h: Rework the way window
    updates are calculated and sent (BUG20515)

  * tcp_in.c: cope with SYN packets received during established states,
    and retransmission of initial SYN.

  * tcp_out.c: set push bit correctly when tcp segments are merged

  2009-03-27 Kieran Mansley
  * tcp_out.c set window correctly on probes (correcting change made
    yesterday)

  2009-03-26 Kieran Mansley
  * tcp.c, tcp_in.c, tcp.h: add tcp_abandon() to cope with dropping
    connections where no reset required (bug #25622)

  * tcp_out.c: set TCP_ACK flag on keepalive and zero window probes 
    (bug #20779)

  2009-02-18 Simon Goldschmidt (Jonathan Larmour and Bill Auerbach)
  * ip_frag.c: patch #6528: the buffer used for IP_FRAG_USES_STATIC_BUF could be
    too small depending on MEM_ALIGNMENT

  2009-02-16 Simon Goldschmidt
  * sockets.h/.c, api_*.h/.c: fixed arguments of socket functions to match the standard;
    converted size argument of netconn_write to 'size_t'

  2009-02-16 Simon Goldschmidt
  * tcp.h, tcp.c: fixed bug #24440: TCP connection close problem on 64-bit host
    by moving accept callback function pointer to TCP_PCB_COMMON

  2009-02-12 Simon Goldschmidt
  * dhcp.c: fixed bug #25345 (DHCPDECLINE is sent with "Maximum message size"
    option)

  2009-02-11 Simon Goldschmidt
  * dhcp.c: fixed bug #24480 (releasing old udp_pdb and pbuf in dhcp_start)

  2009-02-11 Simon Goldschmidt
  * opt.h, api_msg.c: added configurable default valud for netconn->recv_bufsize:
    RECV_BUFSIZE_DEFAULT (fixes bug #23726: pbuf pool exhaustion on slow recv())

  2009-02-10 Simon Goldschmidt
  * tcp.c: fixed bug #25467: Listen backlog is not reset on timeout in SYN_RCVD:
    Accepts_pending is decrease on a corresponding listen pcb when a connection
    in state SYN_RCVD is close.

  2009-01-28 Jonathan Larmour
  * pbuf.c: reclaim pbufs from TCP out-of-sequence segments if we run
    out of pool pbufs.

  2008-12-19 Simon Goldschmidt
  * many files: patch #6699: fixed some warnings on platform where sizeof(int) == 2 

  2008-12-10 Tamas Somogyi, Frédéric Bernon
  * sockets.c: fixed bug #25051: lwip_recvfrom problem with udp: fromaddr and
    port uses deleted netbuf.

  2008-10-18 Simon Goldschmidt
  * tcp_in.c: fixed bug ##24596: Vulnerability on faulty TCP options length
    in tcp_parseopt

  2008-10-15 Simon Goldschmidt
  * ip_frag.c: fixed bug #24517: IP reassembly crashes on unaligned IP headers
    by packing the struct ip_reass_helper.

  2008-10-03 David Woodhouse, Jonathan Larmour
  * etharp.c (etharp_arp_input): Fix type aliasing problem copying ip address.

  2008-10-02 Jonathan Larmour
  * dns.c: Hard-code structure sizes, to avoid issues on some compilers where
    padding is included.

  2008-09-30 Jonathan Larmour
  * sockets.c (lwip_accept): check addr isn't NULL. If it's valid, do an
    assertion check that addrlen isn't NULL.

  2008-09-30 Jonathan Larmour
  * tcp.c: Fix bug #24227, wrong error message in tcp_bind.

  2008-08-26 Simon Goldschmidt
  * inet.h, ip_addr.h: fixed bug #24132: Cross-dependency between ip_addr.h and
    inet.h -> moved declaration of struct in_addr from ip_addr.h to inet.h

  2008-08-14 Simon Goldschmidt
  * api_msg.c: fixed bug #23847: do_close_internal references freed memory (when
    tcp_close returns != ERR_OK)

  2008-07-08 Frédéric Bernon
  * stats.h: Fix some build bugs introduced with patch #6483 (missing some parameters
    in macros, mainly if MEM_STATS=0 and MEMP_STATS=0).

  2008-06-24 Jonathan Larmour
  * tcp_in.c: Fix for bug #23693 as suggested by Art R. Ensure cseg is unused
    if tcp_seg_copy fails.

  2008-06-17 Simon Goldschmidt
  * inet_chksum.c: Checked in some ideas of patch #6460 (loop optimizations)
    and created defines for swapping bytes and folding u32 to u16.

  2008-05-30 Kieran Mansley
  * tcp_in.c Remove redundant "if" statement, and use real rcv_wnd
    rather than rcv_ann_wnd when deciding if packets are in-window.
    Contributed by <arasmussen@consultant.datasys.swri.edu>

  2008-05-30 Kieran Mansley
  * mem.h: Fix BUG#23254.  Change macro definition of mem_* to allow
    passing as function pointers when MEM_LIBC_MALLOC is defined.

  2008-05-09 Jonathan Larmour
  * err.h, err.c, sockets.c: Fix bug #23119: Reorder timeout error code to
    stop it being treated as a fatal error.

  2008-04-15 Simon Goldschmidt
  * dhcp.c: fixed bug #22804: dhcp_stop doesn't clear NETIF_FLAG_DHCP
    (flag now cleared)

  2008-03-27 Simon Goldschmidt
  * mem.c, tcpip.c, tcpip.h, opt.h: fixed bug #21433 (Calling mem_free/pbuf_free
    from interrupt context isn't safe): set LWIP_USE_HEAP_FROM_INTERRUPT to 1
    in lwipopts.h or use pbuf_free_callback(p)/mem_free_callback(m) to free pbufs
    or heap memory from interrupt context

  2008-03-26 Simon Goldschmidt
  * tcp_in.c, tcp.c: fixed bug #22249: division by zero could occur if a remote
    host sent a zero mss as TCP option.


(STABLE-1.3.0)

  ++ New features:

  2008-03-10 Jonathan Larmour
  * inet_chksum.c: Allow choice of one of the sample algorithms to be
    made from lwipopts.h. Fix comment on how to override LWIP_CHKSUM.

  2008-01-22 Frédéric Bernon
  * tcp.c, tcp_in.c, tcp.h, opt.h: Rename LWIP_CALCULATE_EFF_SEND_MSS in 
    TCP_CALCULATE_EFF_SEND_MSS to have coherent TCP options names.

  2008-01-14 Frédéric Bernon
  * rawapi.txt, api_msg.c, tcp.c, tcp_in.c, tcp.h: changes for task #7675 "Enable
    to refuse data on a TCP_EVENT_RECV call". Important, behavior changes for the
    tcp_recv callback (see rawapi.txt).

  2008-01-14 Frédéric Bernon, Marc Chaland
  * ip.c: Integrate patch #6369" ip_input : checking before realloc".
  
  2008-01-12 Frédéric Bernon
  * tcpip.h, tcpip.c, api.h, api_lib.c, api_msg.c, sockets.c: replace the field
    netconn::sem per netconn::op_completed like suggested for the task #7490
    "Add return value to sys_mbox_post".

  2008-01-12 Frédéric Bernon
  * api_msg.c, opt.h: replace DEFAULT_RECVMBOX_SIZE per DEFAULT_TCP_RECVMBOX_SIZE,
    DEFAULT_UDP_RECVMBOX_SIZE and DEFAULT_RAW_RECVMBOX_SIZE (to optimize queues
    sizes), like suggested for the task #7490 "Add return value to sys_mbox_post".

  2008-01-10 Frédéric Bernon
  * tcpip.h, tcpip.c: add tcpip_callback_with_block function for the task #7490
    "Add return value to sys_mbox_post". tcpip_callback is always defined as
    "blocking" ("block" parameter = 1).

  2008-01-10 Frédéric Bernon
  * tcpip.h, tcpip.c, api.h, api_lib.c, api_msg.c, sockets.c: replace the field
    netconn::mbox (sys_mbox_t) per netconn::sem (sys_sem_t) for the task #7490
    "Add return value to sys_mbox_post".

  2008-01-05 Frédéric Bernon
  * sys_arch.txt, api.h, api_lib.c, api_msg.h, api_msg.c, tcpip.c, sys.h, opt.h:
    Introduce changes for task #7490 "Add return value to sys_mbox_post" with some
    modifications in the sys_mbox api: sys_mbox_new take a "size" parameters which
    indicate the number of pointers query by the mailbox. There is three defines
    in opt.h to indicate sizes for tcpip::mbox, netconn::recvmbox, and for the 
    netconn::acceptmbox. Port maintainers, you can decide to just add this new 
    parameter in your implementation, but to ignore it to keep the previous behavior.
    The new sys_mbox_trypost function return a value to know if the mailbox is
    full or if the message is posted. Take a look to sys_arch.txt for more details.
    This new function is used in tcpip_input (so, can be called in an interrupt
    context since the function is not blocking), and in recv_udp and recv_raw.

  2008-01-04 Frédéric Bernon, Simon Goldschmidt, Jonathan Larmour
  * rawapi.txt, api.h, api_lib.c, api_msg.h, api_msg.c, sockets.c, tcp.h, tcp.c,
    tcp_in.c, init.c, opt.h: rename backlog options with TCP_ prefix, limit the
    "backlog" parameter in an u8_t, 0 is interpreted as "smallest queue", add
    documentation in the rawapi.txt file.

  2007-12-31 Kieran Mansley (based on patch from Per-Henrik Lundbolm)
  * tcp.c, tcp_in.c, tcp_out.c, tcp.h: Add TCP persist timer

  2007-12-31 Frédéric Bernon, Luca Ceresoli
  * autoip.c, etharp.c: ip_addr.h: Integrate patch #6348: "Broadcast ARP packets
    in autoip". The change in etharp_raw could be removed, since all calls to
    etharp_raw use ethbroadcast for the "ethdst_addr" parameter. But it could be
    wrong in the future.

  2007-12-30 Frédéric Bernon, Tom Evans
  * ip.c: Fix bug #21846 "LwIP doesn't appear to perform any IP Source Address
    Filtering" reported by Tom Evans.

  2007-12-21 Frédéric Bernon, Simon Goldschmidt, Jonathan Larmour
  * tcp.h, opt.h, api.h, api_msg.h, tcp.c, tcp_in.c, api_lib.c, api_msg.c,
    sockets.c, init.c: task #7252: Implement TCP listen backlog: Warning: raw API
    applications have to call 'tcp_accepted(pcb)' in their accept callback to
    keep accepting new connections.

  2007-12-13 Frédéric Bernon
  * api_msg.c, err.h, err.c, sockets.c, dns.c, dns.h: replace "enum dns_result"
    by err_t type. Add a new err_t code "ERR_INPROGRESS".

  2007-12-12 Frédéric Bernon
  * dns.h, dns.c, opt.h: move DNS options to the "right" place. Most visibles
    are the one which have ram usage.

  2007-12-05 Frédéric Bernon
  * netdb.c: add a LWIP_DNS_API_HOSTENT_STORAGE option to decide to use a static
    set of variables (=0) or a local one (=1). In this last case, your port should
    provide a function "struct hostent* sys_thread_hostent( struct hostent* h)"
    which have to do a copy of "h" and return a pointer ont the "per-thread" copy.

  2007-12-03 Simon Goldschmidt
  * ip.c: ip_input: check if a packet is for inp first before checking all other
    netifs on netif_list (speeds up packet receiving in most cases)

  2007-11-30 Simon Goldschmidt
  * udp.c, raw.c: task #7497: Sort lists (pcb, netif, ...) for faster access
    UDP: move a (connected) pcb selected for input to the front of the list of
    pcbs so that it is found faster next time. Same for RAW pcbs that have eaten
    a packet.

  2007-11-28 Simon Goldschmidt
  * etharp.c, stats.c, stats.h, opt.h: Introduced ETHARP_STATS

  2007-11-25 Simon Goldschmidt
  * dhcp.c: dhcp_unfold_reply() uses pbuf_copy_partial instead of its own copy
    algorithm.

  2007-11-24 Simon Goldschmidt
  * netdb.h, netdb.c, sockets.h/.c: Moved lwip_gethostbyname from sockets.c
    to the new file netdb.c; included lwip_getaddrinfo.

  2007-11-21 Simon Goldschmidt
  * tcp.h, opt.h, tcp.c, tcp_in.c: implemented calculating the effective send-mss
    based on the MTU of the netif used to send. Enabled by default. Disable by
    setting LWIP_CALCULATE_EFF_SEND_MSS to 0. This fixes bug #21492.

  2007-11-19 Frédéric Bernon
  * api_msg.c, dns.h, dns.c: Implement DNS_DOES_NAME_CHECK option (check if name
    received match the name query), implement DNS_USES_STATIC_BUF (the place where
    copy dns payload to parse the response), return an error if there is no place
    for a new query, and fix some minor problems.

  2007-11-16 Simon Goldschmidt
  * new files: ipv4/inet.c, ipv4/inet_chksum.c, ipv6/inet6.c
    removed files: core/inet.c, core/inet6.c
    Moved inet files into ipv4/ipv6 directory; splitted inet.c/inet.h into
    inet and chksum part; changed includes in all lwIP files as appropriate

  2007-11-16 Simon Goldschmidt
  * api.h, api_msg.h, api_lib.c, api_msg.c, socket.h, socket.c: Added sequential
    dns resolver function for netconn api (netconn_gethostbyname) and socket api
    (gethostbyname/gethostbyname_r).

  2007-11-15 Jim Pettinato, Frédéric Bernon
  * opt.h, init.c, tcpip.c, dhcp.c, dns.h, dns.c: add DNS client for simple name
    requests with RAW api interface. Initialization is done in lwip_init() with
    build time options. DNS timer is added in tcpip_thread context. DHCP can set
    DNS server ip addresses when options are received. You need to set LWIP_DNS=1
    in your lwipopts.h file (LWIP_DNS=0 in opt.h). DNS_DEBUG can be set to get
    some traces with LWIP_DEBUGF. Sanity check have been added. There is a "todo"
    list with points to improve.

  2007-11-06 Simon Goldschmidt
  * opt.h, mib2.c: Patch #6215: added ifAdminStatus write support (if explicitly
    enabled by defining SNMP_SAFE_REQUESTS to 0); added code to check link status
    for ifOperStatus if LWIP_NETIF_LINK_CALLBACK is defined.

  2007-11-06 Simon Goldschmidt
  * api.h, api_msg.h and dependent files: Task #7410: Removed the need to include
    core header files in api.h (ip/tcp/udp/raw.h) to hide the internal
    implementation from netconn api applications.

  2007-11-03 Frédéric Bernon
  * api.h, api_lib.c, api_msg.c, sockets.c, opt.h: add SO_RCVBUF option for UDP &
    RAW netconn. You need to set LWIP_SO_RCVBUF=1 in your lwipopts.h (it's disabled
    by default). Netconn API users can use the netconn_recv_bufsize macro to access
    it. This is a first release which have to be improve for TCP. Note it used the
    netconn::recv_avail which need to be more "thread-safe" (note there is already
    the problem for FIONREAD with lwip_ioctl/ioctlsocket).

  2007-11-01 Frédéric Bernon, Marc Chaland
  * sockets.h, sockets.c, api.h, api_lib.c, api_msg.h, api_msg.c, tcp.h, tcp_out.c:
    Integrate "patch #6250 : MSG_MORE flag for send". MSG_MORE is used at socket api
    layer, NETCONN_MORE at netconn api layer, and TCP_WRITE_FLAG_MORE at raw api
    layer. This option enable to delayed TCP PUSH flag on multiple "write" calls.
    Note that previous "copy" parameter for "write" APIs is now called "apiflags".

  2007-10-24 Frédéric Bernon
  * api.h, api_lib.c, api_msg.c: Add macro API_EVENT in the same spirit than 
    TCP_EVENT_xxx macros to get a code more readable. It could also help to remove
    some code (like we have talk in "patch #5919 : Create compile switch to remove
    select code"), but it could be done later.

  2007-10-08 Simon Goldschmidt
  * many files: Changed initialization: many init functions are not needed any
    more since we now rely on the compiler initializing global and static
    variables to zero!

  2007-10-06 Simon Goldschmidt
  * ip_frag.c, memp.c, mib2.c, ip_frag.h, memp_std.h, opt.h: Changed IP_REASSEMBLY
    to enqueue the received pbufs so that multiple packets can be reassembled
    simultaneously and no static reassembly buffer is needed.

  2007-10-05 Simon Goldschmidt
  * tcpip.c, etharp.h, etharp.c: moved ethernet_input from tcpip.c to etharp.c so
    all netifs (or ports) can use it.

  2007-10-05 Frédéric Bernon
  * netifapi.h, netifapi.c: add function netifapi_netif_set_default. Change the 
    common function to reduce a little bit the footprint (for all functions using
    only the "netif" parameter).

  2007-10-03 Frédéric Bernon
  * netifapi.h, netifapi.c: add functions netifapi_netif_set_up, netifapi_netif_set_down,
    netifapi_autoip_start and netifapi_autoip_stop. Use a common function to reduce
    a little bit the footprint (for all functions using only the "netif" parameter).

  2007-09-15 Frédéric Bernon
  * udp.h, udp.c, sockets.c: Changes for "#20503 IGMP Improvement". Add IP_MULTICAST_IF
    option in socket API, and a new field "multicast_ip" in "struct udp_pcb" (for
    netconn and raw API users), only if LWIP_IGMP=1. Add getsockopt processing for
    IP_MULTICAST_TTL and IP_MULTICAST_IF.

  2007-09-10 Frédéric Bernon
  * snmp.h, mib2.c: enable to remove SNMP timer (which consumne several cycles
    even when it's not necessary). snmp_agent.txt tell to call snmp_inc_sysuptime()
    each 10ms (but, it's intrusive if you use sys_timeout feature). Now, you can
    decide to call snmp_add_sysuptime(100) each 1000ms (which is bigger "step", but
    call to a lower frequency). Or, you can decide to not call snmp_inc_sysuptime()
    or snmp_add_sysuptime(), and to define the SNMP_GET_SYSUPTIME(sysuptime) macro.
    This one is undefined by default in mib2.c. SNMP_GET_SYSUPTIME is called inside
    snmp_get_sysuptime(u32_t *value), and enable to change "sysuptime" value only
    when it's queried (any direct call to "sysuptime" is changed by a call to 
    snmp_get_sysuptime).

  2007-09-09 Frédéric Bernon, Bill Florac
  * igmp.h, igmp.c, netif.h, netif.c, ip.c: To enable to have interfaces with IGMP,
    and others without it, there is a new NETIF_FLAG_IGMP flag to set in netif->flags
    if you want IGMP on an interface. igmp_stop() is now called inside netif_remove().
    igmp_report_groups() is now called inside netif_set_link_up() (need to have
    LWIP_NETIF_LINK_CALLBACK=1) to resend reports once the link is up (avoid to wait
    the next query message to receive the matching multicast streams).

  2007-09-08 Frédéric Bernon
  * sockets.c, ip.h, api.h, tcp.h: declare a "struct ip_pcb" which only contains
    IP_PCB. Add in the netconn's "pcb" union a "struct ip_pcb *ip;" (no size change).
    Use this new field to access to common pcb fields (ttl, tos, so_options, etc...).
    Enable to access to these fields with LWIP_TCP=0.

  2007-09-05 Frédéric Bernon
  * udp.c, ipv4/icmp.c, ipv4/ip.c, ipv6/icmp.c, ipv6/ip6.c, ipv4/icmp.h,
    ipv6/icmp.h, opt.h: Integrate "task #7272 : LWIP_ICMP option". The new option
    LWIP_ICMP enable/disable ICMP module inside the IP stack (enable per default).
    Be careful, disabling ICMP make your product non-compliant to RFC1122, but
    help to reduce footprint, and to reduce "visibility" on the Internet.

  2007-09-05 Frédéric Bernon, Bill Florac
  * opt.h, sys.h, tcpip.c, slipif.c, ppp.c, sys_arch.txt: Change parameters list
    for sys_thread_new (see "task #7252 : Create sys_thread_new_ex()"). Two new
    parameters have to be provided: a task name, and a task stack size. For this
    one, since it's platform dependant, you could define the best one for you in
    your lwipopts.h. For port maintainers, you can just add these new parameters
    in your sys_arch.c file, and but it's not mandatory, use them in your OS
    specific functions.

  2007-09-05 Frédéric Bernon
  * inet.c, autoip.c, msg_in.c, msg_out.c, init.c: Move some build time checkings
    inside init.c for task #7142 "Sanity check user-configurable values".

  2007-09-04 Frédéric Bernon, Bill Florac
  * igmp.h, igmp.c, memp_std.h, memp.c, init.c, opt.h: Replace mem_malloc call by
    memp_malloc, and use a new MEMP_NUM_IGMP_GROUP option (see opt.h to define the
    value). It will avoid potential fragmentation problems, use a counter to know
    how many times a group is used on an netif, and free it when all applications
    leave it. MEMP_NUM_IGMP_GROUP got 8 as default value (and init.c got a sanity
    check if LWIP_IGMP!=0).

  2007-09-03 Frédéric Bernon
  * igmp.h, igmp.c, sockets.c, api_msg.c: Changes for "#20503 IGMP Improvement".
    Initialize igmp_mac_filter to NULL in netif_add (this field should be set in
    the netif's "init" function). Use the "imr_interface" field (for socket layer)
    and/or the "interface" field (for netconn layer), for join/leave operations.
    The igmp_join/leavegroup first parameter change from a netif to an ipaddr.
    This field could be a netif's ipaddr, or "any" (same meaning than ip_addr_isany).

  2007-08-30 Frédéric Bernon
  * Add netbuf.h, netbuf.c, Change api.h, api_lib.c: #7249 "Split netbuf functions
    from api/api_lib". Now netbuf API is independant of netconn, and can be used
    with other API (application based on raw API, or future "socket2" API). Ports
    maintainers just have to add src/api/netbuf.c in their makefile/projects.

  2007-08-30 Frédéric Bernon, Jonathan Larmour
  * init.c: Add first version of lwip_sanity_check for task #7142 "Sanity check
    user-configurable values".

  2007-08-29 Frédéric Bernon
  * igmp.h, igmp.c, tcpip.c, init.c, netif.c: change igmp_init and add igmp_start.
    igmp_start is call inside netif_add. Now, igmp initialization is in the same
    spirit than the others modules. Modify some IGMP debug traces.

  2007-08-29 Frédéric Bernon
  * Add init.h, init.c, Change opt.h, tcpip.c: Task  #7213 "Add a lwip_init function"
    Add lwip_init function to regroup all modules initializations, and to provide
    a place to add code for task #7142 "Sanity check user-configurable values".
    Ports maintainers should remove direct initializations calls from their code,
    and add init.c in their makefiles. Note that lwip_init() function is called
    inside tcpip_init, but can also be used by raw api users since all calls are
    disabled when matching options are disabled. Also note that their is new options
    in opt.h, you should configure in your lwipopts.h (they are enabled per default).

  2007-08-26 Marc Boucher
  * api_msg.c: do_close_internal(): Reset the callbacks and arg (conn) to NULL
    since they can under certain circumstances be called with an invalid conn
    pointer after the connection has been closed (and conn has been freed). 

  2007-08-25 Frédéric Bernon (Artem Migaev's Patch)
  * netif.h, netif.c: Integrate "patch #6163 : Function to check if link layer is up".
    Add a netif_is_link_up() function if LWIP_NETIF_LINK_CALLBACK option is set.

  2007-08-22 Frédéric Bernon
  * netif.h, netif.c, opt.h: Rename LWIP_NETIF_CALLBACK in LWIP_NETIF_STATUS_CALLBACK
    to be coherent with new LWIP_NETIF_LINK_CALLBACK option before next release.

  2007-08-22 Frédéric Bernon
  * tcpip.h, tcpip.c, ethernetif.c, opt.h: remove options ETHARP_TCPIP_INPUT &
    ETHARP_TCPIP_ETHINPUT, now, only "ethinput" code is supported, even if the 
    name is tcpip_input (we keep the name of 1.2.0 function).

  2007-08-17 Jared Grubb
  * memp_std.h, memp.h, memp.c, mem.c, stats.c: (Task #7136) Centralize mempool 
    settings into new memp_std.h and optional user file lwippools.h. This adds
    more dynamic mempools, and allows the user to create an arbitrary number of
    mempools for mem_malloc.

  2007-08-16 Marc Boucher
  * api_msg.c: Initialize newconn->state to NETCONN_NONE in accept_function;
    otherwise it was left to NETCONN_CLOSE and sent_tcp() could prematurely
    close the connection.

  2007-08-16 Marc Boucher
  * sockets.c: lwip_accept(): check netconn_peer() error return.

  2007-08-16 Marc Boucher
  * mem.c, mem.h: Added mem_calloc().

  2007-08-16 Marc Boucher
  * tcpip.c, tcpip.h memp.c, memp.h: Added distinct memp (MEMP_TCPIP_MSG_INPKT)
    for input packets to prevent floods from consuming all of MEMP_TCPIP_MSG
    and starving other message types.
    Renamed MEMP_TCPIP_MSG to MEMP_TCPIP_MSG_API

  2007-08-16 Marc Boucher
  * pbuf.c, pbuf.h, etharp.c, tcp_in.c, sockets.c: Split pbuf flags in pbuf
    type and flgs (later renamed to flags).
    Use enum pbuf_flag as pbuf_type.  Renumber PBUF_FLAG_*.
    Improved lwip_recvfrom().  TCP push now propagated.

  2007-08-16 Marc Boucher
  * ethernetif.c, contrib/ports/various: ethbroadcast now a shared global
    provided by etharp.

  2007-08-16 Marc Boucher
  * ppp_oe.c ppp_oe.h, auth.c chap.c fsm.c lcp.c ppp.c ppp.h,
    etharp.c ethernetif.c, etharp.h, opt.h tcpip.h, tcpip.c:
    Added PPPoE support and various PPP improvements.

  2007-07-25 Simon Goldschmidt
  * api_lib.c, ip_frag.c, pbuf.c, api.h, pbuf.h: Introduced pbuf_copy_partial,
    making netbuf_copy_partial use this function.

  2007-07-25 Simon Goldschmidt
  * tcp_in.c: Fix bug #20506: Slow start / initial congestion window starts with
    2 * mss (instead of 1 * mss previously) to comply with some newer RFCs and
    other stacks.

  2007-07-13 Jared Grubb (integrated by Frédéric Bernon)
  * opt.h, netif.h, netif.c, ethernetif.c: Add new configuration option to add
    a link callback in the netif struct, and functions to handle it. Be carefull
    for port maintainers to add the NETIF_FLAG_LINK_UP flag (like in ethernetif.c)
    if you want to be sure to be compatible with future changes...

  2007-06-30 Frédéric Bernon
  * sockets.h, sockets.c: Implement MSG_PEEK flag for recv/recvfrom functions.

  2007-06-21 Simon Goldschmidt
  * etharp.h, etharp.c: Combined etharp_request with etharp_raw for both
    LWIP_AUTOIP =0 and =1 to remove redundant code.

  2007-06-21 Simon Goldschmidt
  * mem.c, memp.c, mem.h, memp.h, opt.h: task #6863: Introduced the option
    MEM_USE_POOLS to use 4 pools with different sized elements instead of a
    heap. This both prevents memory fragmentation and gives a higher speed
    at the cost of more memory consumption. Turned off by default.

  2007-06-21 Simon Goldschmidt
  * api_lib.c, api_msg.c, api.h, api_msg.h: Converted the length argument of
    netconn_write (and therefore also api_msg_msg.msg.w.len) from u16_t into
    int to be able to send a bigger buffer than 64K with one time (mainly
    used from lwip_send).

  2007-06-21 Simon Goldschmidt
  * tcp.h, api_msg.c: Moved the nagle algorithm from netconn_write/do_write
    into a define (tcp_output_nagle) in tcp.h to provide it to raw api users, too.

  2007-06-21 Simon Goldschmidt
  * api.h, api_lib.c, api_msg.c: Fixed bug #20021: Moved sendbuf-processing in
    netconn_write from api_lib.c to api_msg.c to also prevent multiple context-
    changes on low memory or empty send-buffer.

  2007-06-18 Simon Goldschmidt
  * etharp.c, etharp.h: Changed etharp to use a defined hardware address length
    of 6 to avoid loading netif->hwaddr_len every time (since this file is only
    used for ethernet and struct eth_addr already had a defined length of 6).

  2007-06-17 Simon Goldschmidt
  * sockets.c, sockets.h: Implemented socket options SO_NO_CHECK for UDP sockets
    to disable UDP checksum generation on transmit.

  2007-06-13 Frédéric Bernon, Simon Goldschmidt
  * debug.h, api_msg.c: change LWIP_ERROR to use it to check errors like invalid
    pointers or parameters, and let the possibility to redefined it in cc.h. Use
    this macro to check "conn" parameter in api_msg.c functions.

  2007-06-11 Simon Goldschmidt
  * sockets.c, sockets.h: Added UDP lite support for sockets

  2007-06-10 Simon Goldschmidt
  * udp.h, opt.h, api_msg.c, ip.c, udp.c: Included switch LWIP_UDPLITE (enabled
    by default) to switch off UDP-Lite support if not needed (reduces udp.c code
    size)

  2007-06-09 Dominik Spies (integrated by Frédéric Bernon)
  * autoip.h, autoip.c, dhcp.h, dhcp.c, netif.h, netif.c, etharp.h, etharp.c, opt.h:
    AutoIP implementation available for IPv4, with new options LWIP_AUTOIP and
    LWIP_DHCP_AUTOIP_COOP if you want to cooperate with DHCP. Some tips to adapt
    (see TODO mark in the source code).

  2007-06-09 Simon Goldschmidt
  * etharp.h, etharp.c, ethernetif.c: Modified order of parameters for
    etharp_output() to match netif->output so etharp_output() can be used
    directly as netif->output to save one function call.

  2007-06-08 Simon Goldschmidt
  * netif.h, ethernetif.c, slipif.c, loopif.c: Added define
    NETIF_INIT_SNMP(netif, type, speed) to initialize per-netif snmp variables,
    added initialization of those to ethernetif, slipif and loopif.

  2007-05-18 Simon Goldschmidt
  * opt.h, ip_frag.c, ip_frag.h, ip.c: Added option IP_FRAG_USES_STATIC_BUF
    (defaulting to off for now) that can be set to 0 to send fragmented
    packets by passing PBUF_REFs down the stack.

  2007-05-23 Frédéric Bernon
  * api_lib.c: Implement SO_RCVTIMEO for accept and recv on TCP
    connections, such present in patch #5959.

  2007-05-23 Frédéric Bernon
  * api.h, api_lib.c, api_msg.c, sockets.c: group the different NETCONN_UDPxxx
    code in only one part...

  2007-05-18 Simon Goldschmidt
  * opt.h, memp.h, memp.c: Added option MEMP_OVERFLOW_CHECK to check for memp
    elements to overflow. This is achieved by adding some bytes before and after
    each pool element (increasing their size, of course), filling them with a
    prominent value and checking them on freeing the element.
    Set it to 2 to also check every element in every pool each time memp_malloc()
    or memp_free() is called (slower but more helpful).

  2007-05-10 Simon Goldschmidt
  * opt.h, memp.h, memp.c, pbuf.c (see task #6831): use a new memp pool for
    PBUF_POOL pbufs instead of the old pool implementation in pbuf.c to reduce
    code size.

  2007-05-11 Frédéric Bernon
  * sockets.c, api_lib.c, api_msg.h, api_msg.c, netifapi.h, netifapi.c, tcpip.c:
    Include a function pointer instead of a table index in the message to reduce
    footprint. Disable some part of lwip_send and lwip_sendto if some options are
    not set (LWIP_TCP, LWIP_UDP, LWIP_RAW).

  2007-05-10 Simon Goldschmidt
  * *.h (except netif/ppp/*.h): Included patch #5448: include '#ifdef __cplusplus
    \ extern "C" {' in all header files. Now you can write your application using
    the lwIP stack in C++ and simply #include the core files. Note I have left
    out the netif/ppp/*h header files for now, since I don't know which files are
    included by applications and which are for internal use only.

  2007-05-09 Simon Goldschmidt
  * opt.h, *.c/*.h: Included patch #5920: Create define to override C-library
    memcpy. 2 Defines are created: MEMCPY() for normal memcpy, SMEMCPY() for
    situations where some compilers might inline the copy and save a function
    call. Also replaced all calls to memcpy() with calls to (S)MEMCPY().

  2007-05-08 Simon Goldschmidt
  * mem.h: If MEM_LIBC_MALLOC==1, allow the defines (e.g. mem_malloc() -> malloc())
    to be overriden in case the C-library malloc implementation is not protected
    against concurrent access.

  2007-05-04 Simon Goldschmidt (Atte Kojo)
  * etharp.c: Introduced fast one-entry-cache to speed up ARP lookup when sending
    multiple packets to the same host.

  2007-05-04 Frédéric Bernon, Jonathan Larmour
  * sockets.c, api.h, api_lib.c, api_msg.h, api_msg.c: Fix bug #19162 "lwip_sento: a possible
    to corrupt remote addr/port connection state". Reduce problems "not enought memory" with
    netbuf (if we receive lot of datagrams). Improve lwip_sendto (only one exchange between
    sockets api and api_msg which run in tcpip_thread context). Add netconn_sento function.
    Warning, if you directly access to "fromaddr" & "fromport" field from netbuf struct,
    these fields are now renamed "addr" & "port".

  2007-04-11 Jonathan Larmour
  * sys.h, api_lib.c: Provide new sys_mbox_tryfetch function. Require ports to provide new
    sys_arch_mbox_tryfetch function to get a message if one is there, otherwise return
    with SYS_MBOX_EMPTY. sys_arch_mbox_tryfetch can be implemented as a function-like macro
    by the port in sys_arch.h if desired.

  2007-04-06 Frédéric Bernon, Simon Goldschmidt
  * opt.h, tcpip.h, tcpip.c, netifapi.h, netifapi.c: New configuration option LWIP_NETIF_API
    allow to use thread-safe functions to add/remove netif in list, and to start/stop dhcp
    clients, using new functions from netifapi.h. Disable as default (no port change to do).

  2007-04-05 Frédéric Bernon
  * sockets.c: remplace ENOBUFS errors on alloc_socket by ENFILE to be more BSD compliant.

  2007-04-04 Simon Goldschmidt
  * arch.h, api_msg.c, dhcp.c, msg_in.c, sockets.c: Introduced #define LWIP_UNUSED_ARG(x)
    use this for and architecture-independent form to tell the compiler you intentionally
    are not using this variable. Can be overriden in cc.h.

  2007-03-28 Frédéric Bernon
  * opt.h, netif.h, dhcp.h, dhcp.c: New configuration option LWIP_NETIF_HOSTNAME allow to
    define a hostname in netif struct (this is just a pointer, so, you can use a hardcoded
    string, point on one of your's ethernetif field, or alloc a string you will free yourself).
    It will be used by DHCP to register a client hostname, but can also be use when you call
    snmp_set_sysname.

  2007-03-28 Frédéric Bernon
  * netif.h, netif.c: A new NETIF_FLAG_ETHARP flag is defined in netif.h, to allow to 
    initialize a network interface's flag with. It tell this interface is an ethernet
    device, and we can use ARP with it to do a "gratuitous ARP" (RFC 3220 "IP Mobility
    Support for IPv4" section 4.6) when interface is "up" with netif_set_up().

  2007-03-26 Frédéric Bernon, Jonathan Larmour
  * opt.h, tcpip.c: New configuration option LWIP_ARP allow to disable ARP init at build
    time if you only use PPP or SLIP. The default is enable. Note we don't have to call 
    etharp_init in your port's initilization sequence if you use tcpip.c, because this call
    is done in tcpip_init function.

  2007-03-22 Frédéric Bernon
  * stats.h, stats.c, msg_in.c: Stats counters can be change to u32_t if necessary with the
    new option LWIP_STATS_LARGE. If you need this option, define LWIP_STATS_LARGE to 1 in
    your lwipopts.h. More, unused counters are not defined in the stats structs, and not 
    display by stats_display(). Note that some options (SYS_STATS and RAW_STATS) are defined
    but never used. Fix msg_in.c with the correct #if test for a stat display.

  2007-03-21 Kieran Mansley
  * netif.c, netif.h: Apply patch#4197 with some changes (originator: rireland@hmgsl.com). 
    Provides callback on netif up/down state change.

  2007-03-11 Frédéric Bernon, Mace Gael, Steve Reynolds
  * sockets.h, sockets.c, api.h, api_lib.c, api_msg.h, api_msg.c, igmp.h, igmp.c,
    ip.c, netif.h, tcpip.c, opt.h:
    New configuration option LWIP_IGMP to enable IGMP processing. Based on only one 
    filter per all network interfaces. Declare a new function in netif to enable to
    control the MAC filter (to reduce lwIP traffic processing).

  2007-03-11 Frédéric Bernon
  * tcp.h, tcp.c, sockets.c, tcp_out.c, tcp_in.c, opt.h: Keepalive values can
    be configured at run time with LWIP_TCP_KEEPALIVE, but don't change this
    unless you know what you're doing (default are RFC1122 compliant). Note
    that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set in seconds.

  2007-03-08 Frédéric Bernon
  * tcp.h: Keepalive values can be configured at compile time, but don't change
    this unless you know what you're doing (default are RFC1122 compliant).

  2007-03-08 Frédéric Bernon
  * sockets.c, api.h, api_lib.c, tcpip.c, sys.h, sys.c, err.c, opt.h:
    Implement LWIP_SO_RCVTIMEO configuration option to enable/disable SO_RCVTIMEO
    on UDP sockets/netconn.

  2007-03-08 Simon Goldschmidt
  * snmp_msg.h, msg_in.c: SNMP UDP ports can be configured at compile time.

  2007-03-06 Frédéric Bernon
  * api.h, api_lib.c, sockets.h, sockets.c, tcpip.c, sys.h, sys.c, err.h: 
    Implement SO_RCVTIMEO on UDP sockets/netconn.

  2007-02-28 Kieran Mansley (based on patch from Simon Goldschmidt)
  * api_lib.c, tcpip.c, memp.c, memp.h: make API msg structs allocated
    on the stack and remove the API msg type from memp

  2007-02-26 Jonathan Larmour (based on patch from Simon Goldschmidt)
  * sockets.h, sockets.c: Move socket initialization to new
    lwip_socket_init() function.
    NOTE: this changes the API with ports. Ports will have to be
    updated to call lwip_socket_init() now.

  2007-02-26 Jonathan Larmour (based on patch from Simon Goldschmidt)
  * api_lib.c: Use memcpy in netbuf_copy_partial.


  ++ Bug fixes:

  2008-03-17 Frédéric Bernon, Ed Kerekes
  * igmp.h, igmp.c: Fix bug #22613 "IGMP iphdr problem" (could have
    some problems to fill the IP header on some targets, use now the
    ip.h macros to do it).

  2008-03-13 Frédéric Bernon
  * sockets.c: Fix bug #22435 "lwip_recvfrom with TCP break;". Using
    (lwip_)recvfrom with valid "from" and "fromlen" parameters, on a
    TCP connection caused a crash. Note that using (lwip_)recvfrom
    like this is a bit slow and that using (lwip)getpeername is the
    good lwip way to do it (so, using recv is faster on tcp sockets).

  2008-03-12 Frédéric Bernon, Jonathan Larmour
  * api_msg.c, contrib/apps/ping.c: Fix bug #22530 "api_msg.c's
    recv_raw() does not consume data", and the ping sample (with
    LWIP_SOCKET=1, the code did the wrong supposition that lwip_recvfrom
    returned the IP payload, without the IP header).

  2008-03-04 Jonathan Larmour
  * mem.c, stats.c, mem.h: apply patch #6414 to avoid compiler errors
  and/or warnings on some systems where mem_size_t and size_t differ.
  * pbuf.c, ppp.c: Fix warnings on some systems with mem_malloc.

  2008-03-04 Kieran Mansley (contributions by others) 
  * Numerous small compiler error/warning fixes from contributions to
    mailing list after 1.3.0 release candidate made.

  2008-01-25 Cui hengbin (integrated by Frédéric Bernon)
  * dns.c: Fix bug #22108 "DNS problem" caused by unaligned structures.

  2008-01-15 Kieran Mansley
  * tcp_out.c: BUG20511.  Modify persist timer to start when we are
    prevented from sending by a small send window, not just a zero
    send window.

  2008-01-09 Jonathan Larmour
  * opt.h, ip.c: Rename IP_OPTIONS define to IP_OPTIONS_ALLOWED to avoid
    conflict with Linux system headers.

  2008-01-06 Jonathan Larmour
  * dhcp.c: fix bug #19927: "DHCP NACK problem" by clearing any existing set IP
    address entirely on receiving a DHCPNAK, and restarting discovery.

  2007-12-21 Simon Goldschmidt
  * sys.h, api_lib.c, api_msg.c, sockets.c: fix bug #21698: "netconn->recv_avail
    is not protected" by using new macros for interlocked access to modify/test
    netconn->recv_avail.

  2007-12-20 Kieran Mansley (based on patch from Oleg Tyshev)
  * tcp_in.c: fix bug# 21535 (nrtx not reset correctly in SYN_SENT state)

  2007-12-20 Kieran Mansley (based on patch from Per-Henrik Lundbolm)
  * tcp.c, tcp_in.c, tcp_out.c, tcp.h: fix bug #20199 (better handling
    of silly window avoidance and prevent lwIP from shrinking the window)

  2007-12-04 Simon Goldschmidt
  * tcp.c, tcp_in.c: fix bug #21699 (segment leak in ooseq processing when last
    data packet was lost): add assert that all segment lists are empty in
    tcp_pcb_remove before setting pcb to CLOSED state; don't directly set CLOSED
    state from LAST_ACK in tcp_process

  2007-12-02 Simon Goldschmidt
  * sockets.h: fix bug #21654: exclude definition of struct timeval from #ifndef FD_SET
    If including <sys/time.h> for system-struct timeval, LWIP_TIMEVAL_PRIVATE now
    has to be set to 0 in lwipopts.h

  2007-12-02 Simon Goldschmidt
  * api_msg.c, api_lib.c: fix bug #21656 (recvmbox problem in netconn API): always
    allocate a recvmbox in netconn_new_with_proto_and_callback. For a tcp-listen
    netconn, this recvmbox is later freed and a new mbox is allocated for acceptmbox.
    This is a fix for thread-safety and allocates all items needed for a netconn
    when the netconn is created.

  2007-11-30 Simon Goldschmidt
  * udp.c: first attempt to fix bug #21655 (DHCP doesn't work reliably with multiple
    netifs): if LWIP_DHCP is enabled, UDP packets to DHCP_CLIENT_PORT are passed
    to netif->dhcp->pcb only (if that exists) and not to any other pcb for the same
    port (only solution to let UDP pcbs 'bind' to a netif instead of an IP address)

  2007-11-27 Simon Goldschmidt
  * ip.c: fixed bug #21643 (udp_send/raw_send don't fail if netif is down) by
    letting ip_route only use netifs that are up.

  2007-11-27 Simon Goldschmidt
  * err.h, api_lib.c, api_msg.c, sockets.c: Changed error handling: ERR_MEM, ERR_BUF
    and ERR_RTE are seen as non-fatal, all other errors are fatal. netconns and
    sockets block most operations once they have seen a fatal error.

  2007-11-27 Simon Goldschmidt
  * udp.h, udp.c, dhcp.c: Implemented new function udp_sendto_if which takes the
    netif to send as an argument (to be able to send on netifs that are down).

  2007-11-26 Simon Goldschmidt
  * tcp_in.c: Fixed bug #21582: pcb->acked accounting can be wrong when ACKs
    arrive out-of-order

  2007-11-21 Simon Goldschmidt
  * tcp.h, tcp_out.c, api_msg.c: Fixed bug #20287: tcp_output_nagle sends too early
    Fixed the nagle algorithm; nagle now also works for all raw API applications
    and has to be explicitly disabled with 'tcp_pcb->flags |= TF_NODELAY'

  2007-11-12 Frédéric Bernon
  * sockets.c, api.h, api_lib.c, api_msg.h, api_msg.c: Fixed bug #20900. Now, most
    of the netconn_peer and netconn_addr processing is done inside tcpip_thread
    context in do_getaddr.

  2007-11-10 Simon Goldschmidt
  * etharp.c: Fixed bug: assert fired when MEMP_ARP_QUEUE was empty (which can
    happen any time). Now the packet simply isn't enqueued when out of memory.

  2007-11-01 Simon Goldschmidt
  * tcp.c, tcp_in.c: Fixed bug #21494: The send mss (pcb->mss) is set to 536 (or
    TCP_MSS if that is smaller) as long as no MSS option is received from the
    remote host.

  2007-11-01 Simon Goldschmidt
  * tcp.h, tcp.c, tcp_in.c: Fixed bug #21491: The MSS option sent (with SYN)
    is now based on TCP_MSS instead of pcb->mss (on passive open now effectively
    sending our configured TCP_MSS instead of the one received).

  2007-11-01 Simon Goldschmidt
  * tcp_in.c: Fixed bug #21181: On active open, the initial congestion window was
    calculated based on the configured TCP_MSS, not on the MSS option received
    with SYN+ACK.

  2007-10-09 Simon Goldschmidt
  * udp.c, inet.c, inet.h: Fixed UDPLite: send: Checksum was always generated too
    short and also was generated wrong if checksum coverage != tot_len;
    receive: checksum was calculated wrong if checksum coverage != tot_len

  2007-10-08 Simon Goldschmidt
  * mem.c: lfree was not updated in mem_realloc!

  2007-10-07 Frédéric Bernon
  * sockets.c, api.h, api_lib.c: First step to fix "bug #20900 : Potential
    crash error problem with netconn_peer & netconn_addr". VERY IMPORTANT:
    this change cause an API breakage for netconn_addr, since a parameter
    type change. Any compiler should cause an error without any changes in
    yours netconn_peer calls (so, it can't be a "silent change"). It also
    reduce a little bit the footprint for socket layer (lwip_getpeername &
    lwip_getsockname use now a common lwip_getaddrname function since 
    netconn_peer & netconn_addr have the same parameters).

  2007-09-20 Simon Goldschmidt
  * tcp.c: Fixed bug #21080 (tcp_bind without check pcbs in TIME_WAIT state)
    by checking  tcp_tw_pcbs also

  2007-09-19 Simon Goldschmidt
  * icmp.c: Fixed bug #21107 (didn't reset IP TTL in ICMP echo replies)

  2007-09-15 Mike Kleshov
  * mem.c: Fixed bug #21077 (inaccuracy in calculation of lwip_stat.mem.used)

  2007-09-06 Frédéric Bernon
  * several-files: replace some #include "arch/cc.h" by "lwip/arch.h", or simply remove
    it as long as "lwip/opt.h" is included before (this one include "lwip/debug.h" which
    already include "lwip/arch.h"). Like that, default defines are provided by "lwip/arch.h"
    if they are not defined in cc.h, in the same spirit than "lwip/opt.h" for lwipopts.h.

  2007-08-30 Frédéric Bernon
  * igmp.h, igmp.c: Some changes to remove some redundant code, add some traces, 
    and fix some coding style.

  2007-08-28 Frédéric Bernon
  * tcpip.c: Fix TCPIP_MSG_INPKT processing: now, tcpip_input can be used for any
    kind of packets. These packets are considered like Ethernet packets (payload 
    pointing to ethhdr) if the netif got the NETIF_FLAG_ETHARP flag. Else, packets 
    are considered like IP packets (payload pointing to iphdr).

  2007-08-27 Frédéric Bernon
  * api.h, api_lib.c, api_msg.c: First fix for "bug #20900 : Potential crash error
    problem with netconn_peer & netconn_addr". Introduce NETCONN_LISTEN netconn_state
    and remove obsolete ones (NETCONN_RECV & NETCONN_ACCEPT).

  2007-08-24 Kieran Mansley
  * inet.c Modify (acc >> 16) test to ((acc >> 16) != 0) to help buggy
    compiler (Paradigm C++)

  2007-08-09 Frédéric Bernon, Bill Florac
  * stats.h, stats.c, igmp.h, igmp.c, opt.h: Fix for bug #20503 : IGMP Improvement.
    Introduce IGMP_STATS to centralize statistics management.

  2007-08-09 Frédéric Bernon, Bill Florac
  * udp.c: Fix for bug #20503 : IGMP Improvement. Enable to receive a multicast
    packet on a udp pcb binded on an netif's IP address, and not on "any".

  2007-08-09 Frédéric Bernon, Bill Florac
  * igmp.h, igmp.c, ip.c: Fix minor changes from bug #20503 : IGMP Improvement.
    This is mainly on using lookup/lookfor, and some coding styles...

  2007-07-26 Frédéric Bernon (and "thedoctor")
  * igmp.c: Fix bug #20595 to accept IGMPv3 "Query" messages.

  2007-07-25 Simon Goldschmidt
  * api_msg.c, tcp.c: Another fix for bug #20021: by not returning an error if
    tcp_output fails in tcp_close, the code in do_close_internal gets simpler
    (tcp_output is called again later from tcp timers).

  2007-07-25 Simon Goldschmidt
  * ip_frag.c: Fixed bug #20429: use the new pbuf_copy_partial instead of the old
    copy_from_pbuf, which illegally modified the given pbuf.

  2007-07-25 Simon Goldschmidt
  * tcp_out.c: tcp_enqueue: pcb->snd_queuelen didn't work for chaine PBUF_RAMs:
    changed snd_queuelen++ to snd_queuelen += pbuf_clen(p).

  2007-07-24 Simon Goldschmidt
  * api_msg.c, tcp.c: Fix bug #20480: Check the pcb passed to tcp_listen() for the
    correct state (must be CLOSED).

  2007-07-13 Thomas Taranowski (commited by Jared Grubb)
  * memp.c: Fix bug #20478: memp_malloc returned NULL+MEMP_SIZE on failed
    allocation. It now returns NULL.

  2007-07-13 Frédéric Bernon
  * api_msg.c: Fix bug #20318: api_msg "recv" callbacks don't call pbuf_free in
    all error cases.

  2007-07-13 Frédéric Bernon
  * api_msg.c: Fix bug #20315: possible memory leak problem if tcp_listen failed,
    because current code doesn't follow rawapi.txt documentation.

  2007-07-13 Kieran Mansley
  * src/core/tcp_in.c Apply patch#5741 from Oleg Tyshev to fix bug in
    out of sequence processing of received packets

  2007-07-03 Simon Goldschmidt
  * nearly-all-files: Added assertions where PBUF_RAM pbufs are used and an
    assumption is made that this pbuf is in one piece (i.e. not chained). These
    assumptions clash with the possibility of converting to fully pool-based
    pbuf implementations, where PBUF_RAM pbufs might be chained.

  2007-07-03 Simon Goldschmidt
  * api.h, api_lib.c, api_msg.c: Final fix for bug #20021 and some other problems
    when closing tcp netconns: removed conn->sem, less context switches when
    closing, both netconn_close and netconn_delete should safely close tcp
    connections.

  2007-07-02 Simon Goldschmidt
  * ipv4/ip.h, ipv6/ip.h, opt.h, netif.h, etharp.h, ipv4/ip.c, netif.c, raw.c,
    tcp_out.c, udp.c, etharp.c: Added option LWIP_NETIF_HWADDRHINT (default=off)
    to cache ARP table indices with each pcb instead of single-entry cache for
    the complete stack.

  2007-07-02 Simon Goldschmidt
  * tcp.h, tcp.c, tcp_in.c, tcp_out.c: Added some ASSERTS and casts to prevent
    warnings when assigning to smaller types.

  2007-06-28 Simon Goldschmidt
  * tcp_out.c: Added check to prevent tcp_pcb->snd_queuelen from overflowing.

  2007-06-28 Simon Goldschmidt
  * tcp.h: Fixed bug #20287: Fixed nagle algorithm (sending was done too early if
    a segment contained chained pbufs)

  2007-06-28 Frédéric Bernon
  * autoip.c: replace most of rand() calls by a macro LWIP_AUTOIP_RAND which compute
    a "pseudo-random" value based on netif's MAC and some autoip fields. It's always
    possible to define this macro in your own lwipopts.h to always use C library's
    rand(). Note that autoip_create_rand_addr doesn't use this macro.

  2007-06-28 Frédéric Bernon
  * netifapi.h, netifapi.c, tcpip.h, tcpip.c: Update code to handle the option
    LWIP_TCPIP_CORE_LOCKING, and do some changes to be coherent with last modifications
    in api_lib/api_msg (use pointers and not type with table, etc...) 

  2007-06-26 Simon Goldschmidt
  * udp.h: Fixed bug #20259: struct udp_hdr was lacking the packin defines.

  2007-06-25 Simon Goldschmidt
  * udp.c: Fixed bug #20253: icmp_dest_unreach was called with a wrong p->payload
    for udp packets with no matching pcb.

  2007-06-25 Simon Goldschmidt
  * udp.c: Fixed bug #20220: UDP PCB search in udp_input(): a non-local match
    could get udp input packets if the remote side matched.

  2007-06-13 Simon Goldschmidt
  * netif.c: Fixed bug #20180 (TCP pcbs listening on IP_ADDR_ANY could get
    changed in netif_set_ipaddr if previous netif->ip_addr.addr was 0.

  2007-06-13 Simon Goldschmidt
  * api_msg.c: pcb_new sets conn->err if protocol is not implemented
    -> netconn_new_..() does not allocate a new connection for unsupported
    protocols.

  2007-06-13 Frédéric Bernon, Simon Goldschmidt
  * api_lib.c: change return expression in netconn_addr and netconn_peer, because
    conn->err was reset to ERR_OK without any reasons (and error was lost)...

  2007-06-13 Frédéric Bernon, Matthias Weisser
  * opt.h, mem.h, mem.c, memp.c, pbuf.c, ip_frag.c, vj.c: Fix bug #20162. Rename
    MEM_ALIGN in LWIP_MEM_ALIGN and MEM_ALIGN_SIZE in LWIP_MEM_ALIGN_SIZE to avoid
    some macro names collision with some OS macros.

  2007-06-11 Simon Goldschmidt
  * udp.c: UDP Lite: corrected the use of chksum_len (based on RFC3828: if it's 0,
    create checksum over the complete packet. On RX, if it's < 8 (and not 0),
    discard the packet. Also removed the duplicate 'udphdr->chksum = 0' for both
    UDP & UDP Lite.

  2007-06-11 Srinivas Gollakota & Oleg Tyshev
  * tcp_out.c: Fix for bug #20075 : "A problem with keep-alive timer and TCP flags"
    where TCP flags wasn't initialized in tcp_keepalive.

  2007-06-03 Simon Goldschmidt
  * udp.c: udp_input(): Input pbuf was not freed if pcb had no recv function
    registered, p->payload was modified without modifying p->len if sending
    icmp_dest_unreach() (had no negative effect but was definitively wrong).

  2007-06-03 Simon Goldschmidt
  * icmp.c: Corrected bug #19937: For responding to an icmp echo request, icmp
    re-used the input pbuf even if that didn't have enough space to include the
    link headers. Now the space is tested and a new pbuf is allocated for the
    echo response packet if the echo request pbuf isn't big enough.

  2007-06-01 Simon Goldschmidt
  * sockets.c: Checked in patch #5914: Moved sockopt processing into tcpip_thread.

  2007-05-23 Frédéric Bernon
  * api_lib.c, sockets.c: Fixed bug #5958 for netconn_listen (acceptmbox only
    allocated by do_listen if success) and netconn_accept errors handling. In
    most of api_lib functions, we replace some errors checkings like "if (conn==NULL)"
    by ASSERT, except for netconn_delete.

  2007-05-23 Frédéric Bernon
  * api_lib.c: Fixed bug #5957 "Safe-thread problem inside netconn_recv" to return
    an error code if it's impossible to fetch a pbuf on a TCP connection (and not
    directly close the recvmbox).

  2007-05-22 Simon Goldschmidt
  * tcp.c: Fixed bug #1895 (tcp_bind not correct) by introducing a list of
    bound but unconnected (and non-listening) tcp_pcbs.

  2007-05-22 Frédéric Bernon
  * sys.h, sys.c, api_lib.c, tcpip.c: remove sys_mbox_fetch_timeout() (was only
    used for LWIP_SO_RCVTIMEO option) and use sys_arch_mbox_fetch() instead of
    sys_mbox_fetch() in api files. Now, users SHOULD NOT use internal lwIP features
    like "sys_timeout" in their application threads.

  2007-05-22 Frédéric Bernon
  * api.h, api_lib.c, api_msg.h, api_msg.c: change the struct api_msg_msg to see
    which parameters are used by which do_xxx function, and to avoid "misusing"
    parameters (patch #5938).

  2007-05-22 Simon Goldschmidt
  * api_lib.c, api_msg.c, raw.c, api.h, api_msg.h, raw.h: Included patch #5938:
    changed raw_pcb.protocol from u16_t to u8_t since for IPv4 and IPv6, proto
    is only 8 bits wide. This affects the api, as there, the protocol was
    u16_t, too.

  2007-05-18 Simon Goldschmidt
  * memp.c: addition to patch #5913: smaller pointer was returned but
    memp_memory was the same size -> did not save memory.

  2007-05-16 Simon Goldschmidt
  * loopif.c, slipif.c: Fix bug #19729: free pbuf if netif->input() returns
    != ERR_OK.

  2007-05-16 Simon Goldschmidt
  * api_msg.c, udp.c: If a udp_pcb has a local_ip set, check if it is the same
    as the one of the netif used for sending to prevent sending from old
    addresses after a netif address gets changed (partly fixes bug #3168).

  2007-05-16 Frédéric Bernon
  * tcpip.c, igmp.h, igmp.c: Fixed bug "#19800 : IGMP: igmp_tick() will not work
    with NO_SYS=1". Note that igmp_init is always in tcpip_thread (and not in 
    tcpip_init) because we have to be sure that network interfaces are already
    added (mac filter is updated only in igmp_init for the moment).

  2007-05-16 Simon Goldschmidt
  * mem.c, memp.c: Removed semaphores from memp, changed sys_sem_wait calls
    into sys_arch_sem_wait calls to prevent timers from running while waiting
    for the heap. This fixes bug #19167.

  2007-05-13 Simon Goldschmidt
  * tcp.h, sockets.h, sockets.c: Fixed bug from patch #5865 by moving the defines
    for socket options (lwip_set/-getsockopt) used with level IPPROTO_TCP from
    tcp.h to sockets.h.

  2007-05-07 Simon Goldschmidt
  * mem.c: Another attempt to fix bug #17922.

  2007-05-04 Simon Goldschmidt
  * pbuf.c, pbuf.h, etharp.c: Further update to ARP queueing: Changed pbuf_copy()
    implementation so that it can be reused (don't allocate the target
    pbuf inside pbuf_copy()).

  2007-05-04 Simon Goldschmidt
  * memp.c: checked in patch #5913: in memp_malloc() we can return memp as mem
    to save a little RAM (next pointer of memp is not used while not in pool).

  2007-05-03 "maq"
  * sockets.c: Fix ioctl FIONREAD when some data remains from last recv.
    (patch #3574).

  2007-04-23 Simon Goldschmidt
  * loopif.c, loopif.h, opt.h, src/netif/FILES: fix bug #2595: "loopif results
    in NULL reference for incoming TCP packets". Loopif has to be configured
    (using LWIP_LOOPIF_MULTITHREADING) to directly call netif->input()
    (multithreading environments, e.g. netif->input() = tcpip_input()) or
    putting packets on a list that is fed to the stack by calling loopif_poll()
    (single-thread / NO_SYS / polling environment where e.g.
    netif->input() = ip_input).

  2007-04-17 Jonathan Larmour
  * pbuf.c: Use s32_t in pbuf_realloc(), as an s16_t can't reliably hold
    the difference between two u16_t's.
  * sockets.h: FD_SETSIZE needs to match number of sockets, which is
    MEMP_NUM_NETCONN in sockets.c right now.

  2007-04-12 Jonathan Larmour
  * icmp.c: Reset IP header TTL in ICMP ECHO responses (bug #19580).

  2007-04-12 Kieran Mansley
  * tcp.c, tcp_in.c, tcp_out.c, tcp.h: Modify way the retransmission
    timer is reset to fix bug#19434, with help from Oleg Tyshev.

  2007-04-11 Simon Goldschmidt
  * etharp.c, pbuf.c, pbuf.h: 3rd fix for bug #11400 (arp-queuing): More pbufs than
    previously thought need to be copied (everything but PBUF_ROM!). Cleaned up
    pbuf.c: removed functions no needed any more (by etharp).

  2007-04-11 Kieran Mansley
  * inet.c, ip_addr.h, sockets.h, sys.h, tcp.h: Apply patch #5745: Fix
    "Constant is long" warnings with 16bit compilers.  Contributed by
    avatar@mmlab.cse.yzu.edu.tw

  2007-04-05 Frédéric Bernon, Jonathan Larmour
  * api_msg.c: Fix bug #16830: "err_tcp() posts to connection mailbox when no pend on
    the mailbox is active". Now, the post is only done during a connect, and do_send,
    do_write and do_join_leave_group don't do anything if a previous error was signaled.

  2007-04-03 Frédéric Bernon
  * ip.c: Don't set the IP_DF ("Don't fragment") flag in the IP header in IP output
    packets. See patch #5834.

  2007-03-30 Frédéric Bernon
  * api_msg.c: add a "pcb_new" helper function to avoid redundant code, and to add
    missing  pcb allocations checking (in do_bind, and for each raw_new). Fix style.

  2007-03-30 Frédéric Bernon
  * most of files: prefix all debug.h define with "LWIP_" to avoid any conflict with
    others environment defines (these were too "generic").

  2007-03-28 Frédéric Bernon
  * api.h, api_lib.c, sockets.c: netbuf_ref doesn't check its internal pbuf_alloc call
    result and can cause a crash. lwip_send now check netbuf_ref result.

  2007-03-28 Simon Goldschmidt
  * sockets.c Remove "#include <errno.h>" from sockets.c to avoid multiple
    definition of macros (in errno.h and lwip/arch.h) if LWIP_PROVIDE_ERRNO is
    defined. This is the way it should have been already (looking at
    doc/sys_arch.txt)

  2007-03-28 Kieran Mansley
  * opt.h Change default PBUF_POOL_BUFSIZE (again) to accomodate default MSS +
    IP and TCP headers *and* physical link headers

  2007-03-26 Frédéric Bernon (based on patch from Dmitry Potapov)
  * api_lib.c: patch for netconn_write(), fixes a possible race condition which cause
    to send some garbage. It is not a definitive solution, but the patch does solve
    the problem for most cases.

  2007-03-22 Frédéric Bernon
  * api_msg.h, api_msg.c: Remove obsolete API_MSG_ACCEPT and do_accept (never used).

  2007-03-22 Frédéric Bernon
  * api_lib.c: somes resources couldn't be freed if there was errors during
    netconn_new_with_proto_and_callback.

  2007-03-22 Frédéric Bernon
  * ethernetif.c: update netif->input calls to check return value. In older ports,
    it's a good idea to upgrade them, even if before, there could be another problem
    (access to an uninitialized mailbox).

  2007-03-21 Simon Goldschmidt
  * sockets.c: fixed bug #5067 (essentialy a signed/unsigned warning fixed
    by casting to unsigned).

  2007-03-21 Frédéric Bernon
  * api_lib.c, api_msg.c, tcpip.c: integrate sys_mbox_fetch(conn->mbox, NULL) calls from
    api_lib.c to tcpip.c's tcpip_apimsg(). Now, use a local variable and not a
    dynamic one from memp to send tcpip_msg to tcpip_thread in a synchrone call.
    Free tcpip_msg from tcpip_apimsg is not done in tcpip_thread. This give a
    faster and more reliable communication between api_lib and tcpip.

  2007-03-21 Frédéric Bernon
  * opt.h: Add LWIP_NETIF_CALLBACK (to avoid compiler warning) and set it to 0.

  2007-03-21 Frédéric Bernon
  * api_msg.c, igmp.c, igmp.h: Fix C++ style comments

  2007-03-21 Kieran Mansley
  * opt.h Change default PBUF_POOL_BUFSIZE to accomodate default MSS +
    IP and TCP headers

  2007-03-21 Kieran Mansley
  * Fix all uses of pbuf_header to check the return value.  In some
    cases just assert if it fails as I'm not sure how to fix them, but
    this is no worse than before when they would carry on regardless
    of the failure.

  2007-03-21 Kieran Mansley
  * sockets.c, igmp.c, igmp.h, memp.h: Fix C++ style comments and
    comment out missing header include in icmp.c

  2007-03-20 Frédéric Bernon
  * memp.h, stats.c: Fix stats_display function where memp_names table wasn't
    synchronized with memp.h.

  2007-03-20 Frédéric Bernon
  * tcpip.c: Initialize tcpip's mbox, and verify if initialized in tcpip_input,
    tcpip_ethinput, tcpip_callback, tcpip_apimsg, to fix a init problem with 
    network interfaces. Also fix a compiler warning.

  2007-03-20 Kieran Mansley
  * udp.c: Only try and use pbuf_header() to make space for headers if
    not a ROM or REF pbuf.

  2007-03-19 Frédéric Bernon
  * api_msg.h, api_msg.c, tcpip.h, tcpip.c: Add return types to tcpip_apimsg()
    and api_msg_post().

  2007-03-19 Frédéric Bernon
  * Remove unimplemented "memp_realloc" function from memp.h.

  2007-03-11 Simon Goldschmidt
  * pbuf.c: checked in patch #5796: pbuf_alloc: len field claculation caused
    memory corruption.

  2007-03-11 Simon Goldschmidt (based on patch from Dmitry Potapov)
  * api_lib.c, sockets.c, api.h, api_msg.h, sockets.h: Fixed bug #19251
    (missing `const' qualifier in socket functions), to get more compatible to
    standard POSIX sockets.

  2007-03-11 Frédéric Bernon (based on patch from Dmitry Potapov)
  * sockets.c: Add asserts inside bind, connect and sendto to check input
    parameters. Remove excessive set_errno() calls after get_socket(), because
    errno is set inside of get_socket(). Move last sock_set_errno() inside
    lwip_close.

  2007-03-09 Simon Goldschmidt
  * memp.c: Fixed bug #11400: New etharp queueing introduced bug: memp_memory
    was allocated too small.

  2007-03-06 Simon Goldschmidt
  * tcpip.c: Initialize dhcp timers in tcpip_thread (if LWIP_DHCP) to protect
    the stack from concurrent access.

  2007-03-06 Frédéric Bernon, Dmitry Potapov
  * tcpip.c, ip_frag.c, ethernetif.c: Fix some build problems, and a redundancy
    call to "lwip_stats.link.recv++;" in low_level_input() & ethernetif_input().

  2007-03-06 Simon Goldschmidt
  * ip_frag.c, ip_frag.h: Reduce code size: don't include code in those files
    if IP_FRAG == 0 and IP_REASSEMBLY == 0

  2007-03-06 Frédéric Bernon, Simon Goldschmidt
  * opt.h, ip_frag.h, tcpip.h, tcpip.c, ethernetif.c: add new configuration
    option named ETHARP_TCPIP_ETHINPUT, which enable the new tcpip_ethinput.
    Allow to do ARP processing for incoming packets inside tcpip_thread
    (protecting ARP layer against concurrent access). You can also disable
    old code using tcp_input with new define ETHARP_TCPIP_INPUT set to 0.
    Older ports have to use tcpip_ethinput.

  2007-03-06 Simon Goldschmidt (based on patch from Dmitry Potapov)
  * err.h, err.c: fixed compiler warning "initialization dircards qualifiers
    from pointer target type"

  2007-03-05 Frédéric Bernon
  * opt.h, sockets.h: add new configuration options (LWIP_POSIX_SOCKETS_IO_NAMES,
    ETHARP_TRUST_IP_MAC, review SO_REUSE)

  2007-03-04 Frédéric Bernon
  * api_msg.c: Remove some compiler warnings : parameter "pcb" was never
    referenced.

  2007-03-04 Frédéric Bernon
  * api_lib.c: Fix "[patch #5764] api_lib.c cleanup: after patch #5687" (from
    Dmitry Potapov).
    The api_msg struct stay on the stack (not moved to netconn struct).

  2007-03-04 Simon Goldschmidt (based on patch from Dmitry Potapov)
  * pbuf.c: Fix BUG#19168 - pbuf_free can cause deadlock (if
    SYS_LIGHTWEIGHT_PROT=1 & freeing PBUF_RAM when mem_sem is not available)
    Also fixed cast warning in pbuf_alloc()

  2007-03-04 Simon Goldschmidt
  * etharp.c, etharp.h, memp.c, memp.h, opt.h: Fix BUG#11400 - don't corrupt
    existing pbuf chain when enqueuing multiple pbufs to a pending ARP request

  2007-03-03 Frédéric Bernon
  * udp.c: remove obsolete line "static struct udp_pcb *pcb_cache = NULL;"
    It is static, and never used in udp.c except udp_init().

  2007-03-02 Simon Goldschmidt
  * tcpip.c: Moved call to ip_init(), udp_init() and tcp_init() from
    tcpip_thread() to tcpip_init(). This way, raw API connections can be
    initialized before tcpip_thread is running (e.g. before OS is started)

  2007-03-02 Frédéric Bernon
  * rawapi.txt: Fix documentation mismatch with etharp.h about etharp_tmr's call
    interval.

  2007-02-28 Kieran Mansley 
  * pbuf.c: Fix BUG#17645 - ensure pbuf payload pointer is not moved
    outside the region of the pbuf by pbuf_header()

  2007-02-28 Kieran Mansley 
  * sockets.c: Fix BUG#19161 - ensure milliseconds timeout is non-zero
    when supplied timeout is also non-zero 

(STABLE-1.2.0)

  2006-12-05 Leon Woestenberg
  * CHANGELOG: Mention STABLE-1.2.0 release.

  ++ New features:

  2006-12-01 Christiaan Simons
  * mem.h, opt.h: Added MEM_LIBC_MALLOC option.
    Note this is a workaround. Currently I have no other options left.

  2006-10-26 Christiaan Simons (accepted patch by Jonathan Larmour)
  * ipv4/ip_frag.c: rename MAX_MTU to IP_FRAG_MAX_MTU and move define
    to include/lwip/opt.h.
  * ipv4/lwip/ip_frag.h: Remove unused IP_REASS_INTERVAL.
    Move IP_REASS_MAXAGE and IP_REASS_BUFSIZE to include/lwip/opt.h.
  * opt.h: Add above new options.

  2006-08-18 Christiaan Simons
  * tcp_{in,out}.c: added SNMP counters.
  * ipv4/ip.c: added SNMP counters.
  * ipv4/ip_frag.c: added SNMP counters.

  2006-08-08 Christiaan Simons
  * etharp.{c,h}: added etharp_find_addr() to read
    (stable) ethernet/IP address pair from ARP table

  2006-07-14 Christiaan Simons
  * mib_structs.c: added
  * include/lwip/snmp_structs.h: added
  * netif.{c,h}, netif/ethernetif.c: added SNMP statistics to netif struct

  2006-07-06 Christiaan Simons
  * snmp/asn1_{enc,dec}.c added
  * snmp/mib2.c added
  * snmp/msg_{in,out}.c added
  * include/lwip/snmp_asn1.h added
  * include/lwip/snmp_msg.h added
  * doc/snmp_agent.txt added

  2006-03-29 Christiaan Simons
  * inet.c, inet.h: Added platform byteswap support.
    Added LWIP_PLATFORM_BYTESWAP define (defaults to 0) and
    optional LWIP_PLATFORM_HTONS(), LWIP_PLATFORM_HTONL() macros.

  ++ Bug fixes:

  2006-11-30 Christiaan Simons
  * dhcp.c: Fixed false triggers of request_timeout.

  2006-11-28 Christiaan Simons
  * netif.c: In netif_add() fixed missing clear of ip_addr, netmask, gw and flags.

  2006-10-11 Christiaan Simons
  * api_lib.c etharp.c, ip.c, memp.c, stats.c, sys.{c,h} tcp.h:
    Partially accepted patch #5449 for ANSI C compatibility / build fixes.
  * ipv4/lwip/ip.h ipv6/lwip/ip.h: Corrected UDP-Lite protocol
    identifier from 170 to 136 (bug #17574).

  2006-10-10 Christiaan Simons
  * api_msg.c: Fixed Nagle algorithm as reported by Bob Grice.

  2006-08-17 Christiaan Simons
  * udp.c: Fixed bug #17200, added check for broadcast
    destinations for PCBs bound to a unicast address.

  2006-08-07 Christiaan Simons
  * api_msg.c: Flushing TCP output in do_close() (bug #15926).

  2006-06-27 Christiaan Simons
  * api_msg.c: Applied patch for cold case (bug #11135).
    In accept_function() ensure newconn->callback is always initialized.

  2006-06-15 Christiaan Simons
  * mem.h: added MEM_SIZE_F alias to fix an ancient cold case (bug #1748),
    facilitate printing of mem_size_t and u16_t statistics.

  2006-06-14 Christiaan Simons
  * api_msg.c: Applied patch #5146 to handle allocation failures
    in accept() by Kevin Lawson.

  2006-05-26 Christiaan Simons
  * api_lib.c: Removed conn->sem creation and destruction 
    from netconn_write() and added sys_sem_new to netconn_new_*.

(STABLE-1_1_1)

  2006-03-03  Christiaan Simons
  * ipv4/ip_frag.c: Added bound-checking assertions on ip_reassbitmap
    access and added pbuf_alloc() return value checks.

  2006-01-01  Leon Woestenberg <leon.woestenberg@gmx.net>
  * tcp_{in,out}.c, tcp_out.c: Removed 'even sndbuf' fix in TCP, which is
    now handled by the checksum routine properly.

  2006-02-27  Leon Woestenberg <leon.woestenberg@gmx.net>
   * pbuf.c: Fix alignment; pbuf_init() would not work unless
     pbuf_pool_memory[] was properly aligned. (Patch by Curt McDowell.)

  2005-12-20  Leon Woestenberg <leon.woestenberg@gmx.net>
  * tcp.c: Remove PCBs which stay in LAST_ACK state too long. Patch
    submitted by Mitrani Hiroshi.

  2005-12-15  Christiaan Simons
  * inet.c: Disabled the added summing routine to preserve code space.

  2005-12-14  Leon Woestenberg <leon.woestenberg@gmx.net>
  * tcp_in.c: Duplicate FIN ACK race condition fix by Kelvin Lawson.
    Added Curt McDowell's optimized checksumming routine for future
    inclusion. Need to create test case for unaliged, aligned, odd,
    even length combination of cases on various endianess machines.

  2005-12-09  Christiaan Simons
  * inet.c: Rewrote standard checksum routine in proper portable C.

  2005-11-25  Christiaan Simons
  * udp.c tcp.c: Removed SO_REUSE hack. Should reside in socket code only.
  * *.c: introduced cc.h LWIP_DEBUG formatters matching the u16_t, s16_t,
    u32_t, s32_t typedefs. This solves most debug word-length assumes.

  2005-07-17 Leon Woestenberg <leon.woestenberg@gmx.net>
  * inet.c: Fixed unaligned 16-bit access in the standard checksum
    routine by Peter Jolasson.
  * slipif.c: Fixed implementation assumption of single-pbuf datagrams.

  2005-02-04 Leon Woestenberg <leon.woestenberg@gmx.net>
  * tcp_out.c: Fixed uninitialized 'queue' referenced in memerr branch.
  * tcp_{out|in}.c: Applied patch fixing unaligned access.

  2005-01-04 Leon Woestenberg <leon.woestenberg@gmx.net>
  * pbuf.c: Fixed missing semicolon after LWIP_DEBUG statement.

  2005-01-03 Leon Woestenberg <leon.woestenberg@gmx.net>
  * udp.c: UDP pcb->recv() was called even when it was NULL.

(STABLE-1_1_0)

  2004-12-28 Leon Woestenberg <leon.woestenberg@gmx.net>
  * etharp.*: Disabled multiple packets on the ARP queue.
    This clashes with TCP queueing.

  2004-11-28 Leon Woestenberg <leon.woestenberg@gmx.net>
  * etharp.*: Fixed race condition from ARP request to ARP timeout.
    Halved the ARP period, doubled the period counts.
    ETHARP_MAX_PENDING now should be at least 2. This prevents
    the counter from reaching 0 right away (which would allow
    too little time for ARP responses to be received).

  2004-11-25 Leon Woestenberg <leon.woestenberg@gmx.net>
  * dhcp.c: Decline messages were not multicast but unicast.
  * etharp.c: ETHARP_CREATE is renamed to ETHARP_TRY_HARD.
    Do not try hard to insert arbitrary packet's source address,
    etharp_ip_input() now calls etharp_update() without ETHARP_TRY_HARD. 
    etharp_query() now always DOES call ETHARP_TRY_HARD so that users
    querying an address will see it appear in the cache (DHCP could
    suffer from this when a server invalidly gave an in-use address.)
  * ipv4/ip_addr.h: Renamed ip_addr_maskcmp() to _netcmp() as we are
    comparing network addresses (identifiers), not the network masks
    themselves.
  * ipv4/ip_addr.c: ip_addr_isbroadcast() now checks that the given
    IP address actually belongs to the network of the given interface.

  2004-11-24 Kieran Mansley <kjm25@cam.ac.uk>
  * tcp.c: Increment pcb->snd_buf when ACK is received in SYN_SENT state.

(STABLE-1_1_0-RC1)

  2004-10-16 Kieran Mansley <kjm25@cam.ac.uk>
  * tcp.c: Add code to tcp_recved() to send an ACK (window update) immediately,
    even if one is already pending, if the rcv_wnd is above a threshold
    (currently TCP_WND/2). This avoids waiting for a timer to expire to send a
    delayed ACK in order to open the window if the stack is only receiving data.

  2004-09-12 Kieran Mansley <kjm25@cam.ac.uk>
  * tcp*.*: Retransmit time-out handling improvement by Sam Jansen.

  2004-08-20 Tony Mountifield <tony@softins.co.uk>
  * etharp.c: Make sure the first pbuf queued on an ARP entry
    is properly ref counted.

  2004-07-27 Tony Mountifield <tony@softins.co.uk>
  * debug.h: Added (int) cast in LWIP_DEBUGF() to avoid compiler
    warnings about comparison.
  * pbuf.c: Stopped compiler complaining of empty if statement
    when LWIP_DEBUGF() empty.  Closed an unclosed comment.
  * tcp.c: Stopped compiler complaining of empty if statement
    when LWIP_DEBUGF() empty.
  * ip.h Corrected IPH_TOS() macro: returns a byte, so doesn't need htons().
  * inet.c: Added a couple of casts to quiet the compiler.
    No need to test isascii(c) before isdigit(c) or isxdigit(c).

  2004-07-22 Tony Mountifield <tony@softins.co.uk>
  * inet.c: Made data types consistent in inet_ntoa().
    Added casts for return values of checksum routines, to pacify compiler.
  * ip_frag.c, tcp_out.c, sockets.c, pbuf.c
    Small corrections to some debugging statements, to pacify compiler.

  2004-07-21 Tony Mountifield <tony@softins.co.uk>
  * etharp.c: Removed spurious semicolon and added missing end-of-comment.
  * ethernetif.c Updated low_level_output() to match prototype for
    netif->linkoutput and changed low_level_input() similarly for consistency.
  * api_msg.c: Changed recv_raw() from int to u8_t, to match prototype
    of raw_recv() in raw.h and so avoid compiler error.
  * sockets.c: Added trivial (int) cast to keep compiler happier.
  * ip.c, netif.c Changed debug statements to use the tidier ip4_addrN() macros.

(STABLE-1_0_0)

  ++ Changes:

  2004-07-05 Leon Woestenberg <leon.woestenberg@gmx.net>
  * sockets.*: Restructured LWIP_PRIVATE_TIMEVAL. Make sure
    your cc.h file defines this either 1 or 0. If non-defined,
    defaults to 1.
  * .c: Added <string.h> and <errno.h> includes where used.
  * etharp.c: Made some array indices unsigned.

  2004-06-27 Leon Woestenberg <leon.woestenberg@gmx.net>
  * netif.*: Added netif_set_up()/down().
  * dhcp.c: Changes to restart program flow.

  2004-05-07 Leon Woestenberg <leon.woestenberg@gmx.net>
  * etharp.c: In find_entry(), instead of a list traversal per candidate, do a
    single-pass lookup for different candidates. Should exploit locality.

  2004-04-29 Leon Woestenberg <leon.woestenberg@gmx.net>
  * tcp*.c: Cleaned up source comment documentation for Doxygen processing.
  * opt.h: ETHARP_ALWAYS_INSERT option removed to comply with ARP RFC.
  * etharp.c: update_arp_entry() only adds new ARP entries when adviced to by
    the caller. This deprecates the ETHARP_ALWAYS_INSERT overrule option.

  ++ Bug fixes:

  2004-04-27 Leon Woestenberg <leon.woestenberg@gmx.net>
  * etharp.c: Applied patch of bug #8708 by Toni Mountifield with a solution
    suggested by Timmy Brolin. Fix for 32-bit processors that cannot access
    non-aligned 32-bit words, such as soms 32-bit TCP/IP header fields. Fix
    is to prefix the 14-bit Ethernet headers with two padding bytes.

  2004-04-23 Leon Woestenberg <leon.woestenberg@gmx.net>
  * ip_addr.c: Fix in the ip_addr_isbroadcast() check.
  * etharp.c: Fixed the case where the packet that initiates the ARP request
    is not queued, and gets lost. Fixed the case where the packets destination
    address is already known; we now always queue the packet and perform an ARP
    request.

(STABLE-0_7_0)

  ++ Bug fixes:

  * Fixed TCP bug for SYN_SENT to ESTABLISHED state transition.
  * Fixed TCP bug in dequeueing of FIN from out of order segment queue.
  * Fixed two possible NULL references in rare cases.

(STABLE-0_6_6)

  ++ Bug fixes:

  * Fixed DHCP which did not include the IP address in DECLINE messages.

  ++ Changes:

  * etharp.c has been hauled over a bit.

(STABLE-0_6_5)

  ++ Bug fixes:

  * Fixed TCP bug induced by bad window resizing with unidirectional TCP traffic.
  * Packets sent from ARP queue had invalid source hardware address.

  ++ Changes:

  * Pass-by ARP requests do now update the cache.

  ++ New features:

  * No longer dependent on ctype.h.
  * New socket options.
  * Raw IP pcb support.

(STABLE-0_6_4)

  ++ Bug fixes:

  * Some debug formatters and casts fixed.
  * Numereous fixes in PPP.

  ++ Changes:

  * DEBUGF now is LWIP_DEBUGF
  * pbuf_dechain() has been re-enabled.
  * Mentioned the changed use of CVS branches in README.

(STABLE-0_6_3)

  ++ Bug fixes:

  * Fixed pool pbuf memory leak in pbuf_alloc().
    Occured if not enough PBUF_POOL pbufs for a packet pbuf chain.
    Reported by Savin Zlobec.

  * PBUF_POOL chains had their tot_len field not set for non-first
    pbufs. Fixed in pbuf_alloc().

  ++ New features:

  * Added PPP stack contributed by Marc Boucher

  ++ Changes:

  * Now drops short packets for ICMP/UDP/TCP protocols. More robust.

  * ARP queueuing now queues the latest packet instead of the first.
    This is the RFC recommended behaviour, but can be overridden in
    lwipopts.h.

(0.6.2)

  ++ Bugfixes:

  * TCP has been fixed to deal with the new use of the pbuf->ref
    counter.

  * DHCP dhcp_inform() crash bug fixed.

  ++ Changes:

  * Removed pbuf_pool_free_cache and pbuf_pool_alloc_cache. Also removed
    pbuf_refresh(). This has sped up pbuf pool operations considerably.
    Implemented by David Haas.

(0.6.1)

  ++ New features:

  * The packet buffer implementation has been enhanced to support
    zero-copy and copy-on-demand for packet buffers which have their
    payloads in application-managed memory.
    Implemented by David Haas.

    Use PBUF_REF to make a pbuf refer to RAM. lwIP will use zero-copy
    if an outgoing packet can be directly sent on the link, or perform
    a copy-on-demand when necessary.

    The application can safely assume the packet is sent, and the RAM
    is available to the application directly after calling udp_send()
    or similar function.

  ++ Bugfixes:

  * ARP_QUEUEING should now correctly work for all cases, including
    PBUF_REF.
    Implemented by Leon Woestenberg.

  ++ Changes:

  * IP_ADDR_ANY is no longer a NULL pointer. Instead, it is a pointer
    to a '0.0.0.0' IP address.

  * The packet buffer implementation is changed. The pbuf->ref counter
    meaning has changed, and several pbuf functions have been
    adapted accordingly.

  * netif drivers have to be changed to set the hardware address length field
    that must be initialized correctly by the driver (hint: 6 for Ethernet MAC).
    See the contrib/ports/c16x cs8900 driver as a driver example.

  * netif's have a dhcp field that must be initialized to NULL by the driver.
    See the contrib/ports/c16x cs8900 driver as a driver example.

(0.5.x) This file has been unmaintained up to 0.6.1. All changes are
  logged in CVS but have not been explained here.

(0.5.3) Changes since version 0.5.2

  ++ Bugfixes:

  * memp_malloc(MEMP_API_MSG) could fail with multiple application
    threads because it wasn't protected by semaphores.

  ++ Other changes:

  * struct ip_addr now packed.

  * The name of the time variable in arp.c has been changed to ctime
    to avoid conflicts with the time() function.

(0.5.2) Changes since version 0.5.1

  ++ New features:

  * A new TCP function, tcp_tmr(), now handles both TCP timers.

  ++ Bugfixes:

  * A bug in tcp_parseopt() could cause the stack to hang because of a
    malformed TCP option.

  * The address of new connections in the accept() function in the BSD
    socket library was not handled correctly.

  * pbuf_dechain() did not update the ->tot_len field of the tail.

  * Aborted TCP connections were not handled correctly in all
    situations.

  ++ Other changes:

  * All protocol header structs are now packed.

  * The ->len field in the tcp_seg structure now counts the actual
    amount of data, and does not add one for SYN and FIN segments.

(0.5.1) Changes since version 0.5.0

  ++ New features:

  * Possible to run as a user process under Linux.

  * Preliminary support for cross platform packed structs.

  * ARP timer now implemented.

  ++ Bugfixes:

  * TCP output queue length was badly initialized when opening
    connections.

  * TCP delayed ACKs were not sent correctly.

  * Explicit initialization of BSS segment variables.

  * read() in BSD socket library could drop data.

  * Problems with memory alignment.

  * Situations when all TCP buffers were used could lead to
    starvation.

  * TCP MSS option wasn't parsed correctly.

  * Problems with UDP checksum calculation.

  * IP multicast address tests had endianess problems.

  * ARP requests had wrong destination hardware address.

  ++ Other changes:

  * struct eth_addr changed from u16_t[3] array to u8_t[6].

  * A ->linkoutput() member was added to struct netif.

  * TCP and UDP ->dest_* struct members where changed to ->remote_*.

  * ntoh* macros are now null definitions for big endian CPUs.

(0.5.0) Changes since version 0.4.2

  ++ New features:

  * Redesigned operating system emulation layer to make porting easier.

  * Better control over TCP output buffers.

  * Documenation added.

  ++ Bugfixes:

  * Locking issues in buffer management.

  * Bugfixes in the sequential API.

  * IP forwarding could cause memory leakage. This has been fixed.

  ++ Other changes:

  * Directory structure somewhat changed; the core/ tree has been
    collapsed.

(0.4.2) Changes since version 0.4.1

  ++ New features:

  * Experimental ARP implementation added.

  * Skeleton Ethernet driver added.

  * Experimental BSD socket API library added.

  ++ Bugfixes:

  * In very intense situations, memory leakage could occur. This has
    been fixed.

  ++ Other changes:

  * Variables named "data" and "code" have been renamed in order to
    avoid name conflicts in certain compilers.

  * Variable++ have in appliciable cases been translated to ++variable
    since some compilers generate better code in the latter case.

(0.4.1) Changes since version 0.4

  ++ New features:

  * TCP: Connection attempts time out earlier than data
    transmissions. Nagle algorithm implemented. Push flag set on the
    last segment in a burst.

  * UDP: experimental support for UDP-Lite extensions.

  ++ Bugfixes:

  * TCP: out of order segments were in some cases handled incorrectly,
    and this has now been fixed. Delayed acknowledgements was broken
    in 0.4, has now been fixed. Binding to an address that is in use
    now results in an error. Reset connections sometimes hung an
    application; this has been fixed.

  * Checksum calculation sometimes failed for chained pbufs with odd
    lengths. This has been fixed.

  * API: a lot of bug fixes in the API. The UDP API has been improved
    and tested. Error reporting and handling has been
    improved. Logical flaws and race conditions for incoming TCP
    connections has been found and removed.

  * Memory manager: alignment issues. Reallocating memory sometimes
    failed, this has been fixed.

  * Generic library: bcopy was flawed and has been fixed.

  ++ Other changes:

  * API: all datatypes has been changed from generic ones such as
    ints, to specified ones such as u16_t. Functions that return
    errors now have the correct type (err_t).

  * General: A lot of code cleaned up and debugging code removed. Many
    portability issues have been fixed.

  * The license was changed; the advertising clause was removed.

  * C64 port added.

  * Thanks: Huge thanks go to Dagan Galarneau, Horst Garnetzke, Petri
    Kosunen, Mikael Caleres, and Frits Wilmink for reporting and
    fixing bugs!

(0.4) Changes since version 0.3.1

  * Memory management has been radically changed; instead of
    allocating memory from a shared heap, memory for objects that are
    rapidly allocated and deallocated is now kept in pools. Allocation
    and deallocation from those memory pools is very fast. The shared
    heap is still present but is used less frequently.

  * The memory, memory pool, and packet buffer subsystems now support
    4-, 2-, or 1-byte alignment.

  * "Out of memory" situations are handled in a more robust way.

  * Stack usage has been reduced.

  * Easier configuration of lwIP parameters such as memory usage,
    TTLs, statistics gathering, etc. All configuration parameters are
    now kept in a single header file "lwipopts.h".

  * The directory structure has been changed slightly so that all
    architecture specific files are kept under the src/arch
    hierarchy.

  * Error propagation has been improved, both in the protocol modules
    and in the API.

  * The code for the RTXC architecture has been implemented, tested
    and put to use.

  * Bugs have been found and corrected in the TCP, UDP, IP, API, and
    the Internet checksum modules.

  * Bugs related to porting between a 32-bit and a 16-bit architecture
    have been found and corrected.

  * The license has been changed slightly to conform more with the
    original BSD license, including the advertisement clause.

(0.3.1) Changes since version 0.3

  * Fix of a fatal bug in the buffer management. Pbufs with allocated
    RAM never returned the RAM when the pbuf was deallocated.

  * TCP congestion control, window updates and retransmissions did not
    work correctly. This has now been fixed.

  * Bugfixes in the API.

(0.3) Changes since version 0.2

  * New and improved directory structure. All include files are now
    kept in a dedicated include/ directory.

  * The API now has proper error handling. A new function,
    netconn_err(), now returns an error code for the connection in
    case of errors.

  * Improvements in the memory management subsystem. The system now
    keeps a pointer to the lowest free memory block. A new function,
    mem_malloc2() tries to allocate memory once, and if it fails tries
    to free some memory and retry the allocation.

  * Much testing has been done with limited memory
    configurations. lwIP now does a better job when overloaded.

  * Some bugfixes and improvements to the buffer (pbuf) subsystem.

  * Many bugfixes in the TCP code:

    - Fixed a bug in tcp_close().

    - The TCP receive window was incorrectly closed when out of
      sequence segments was received. This has been fixed.

    - Connections are now timed-out of the FIN-WAIT-2 state.

    - The initial congestion window could in some cases be too
      large. This has been fixed.

    - The retransmission queue could in some cases be screwed up. This
      has been fixed.

    - TCP RST flag now handled correctly.

    - Out of sequence data was in some cases never delivered to the
      application. This has been fixed.

    - Retransmitted segments now contain the correct acknowledgment
      number and advertised window.

    - TCP retransmission timeout backoffs are not correctly computed
      (ala BSD). After a number of retransmissions, TCP now gives up
      the connection.

  * TCP connections now are kept on three lists, one for active
    connections, one for listening connections, and one for
    connections that are in TIME-WAIT. This greatly speeds up the fast
    timeout processing for sending delayed ACKs.

  * TCP now provides proper feedback to the application when a
    connection has been successfully set up.

  * More comments have been added to the code. The code has also been
    somewhat cleaned up.

(0.2) Initial public release.
