lwIP Wiki

Please refer to the CHANGELOG for a complete list of all changes made in version 1.3.1. The following are some particular notes and gotchas that you should be aware of if you are updating your code from 1.3.0 to 1.3.1. For updates to earlier versions please see LwIP version 1.3.0 release notes.

  • Sockets API
    • lwip_accept() returns EWOULDBLOCK if it would block on non-blocking socket.
    • Implement the SO(F)_BROADCAST filter for all API layers. Some changes to behaviour if IP_SOF_BROADCAST is enabled
    • set_errno can be overridden
    • The arguments of some socket functions have been fixed to match the standard
    • Timeout error is no longer classed as fatal
  • Netconn API
    • Added configurable default value for netconn->recv_bufsize: RECV_BUFSIZE_DEFAULT
  • TCP
    • Timestamp option now supported
    • API to tcp_enqueue() has changed, but as not part of the public API this should have little impact on external code.
    • Improvements to Nagle algorithm so segment is sent when full even though unsent->next == NULL
    • unsent and unacked queues are now sorted by sequence number
    • Update documentation for tcp_connect(): if tcp_connect() fails pcb->err is called, not pcb->connected
    • PSH bits are set correctly when packets are merged
    • tcp_abandon() function added to drop a connection without sending a RST
    • TCP window update algorithms improved
  • IP
    • Added ip_current_netif() and ip_current_header() to receive extended info about the currently received packet.
  • Other
    • The current version of the stack is now available using LWIP_VERSION
    • The err_t type is now overridable to use a more efficient type (define LWIP_ERR_T in cc.h)
    • The debug statistics display can now be configured to display individual modules stats, and more modules are supported.
    • AUTOIP now has a customizable "seed" address
    • New AUTOIP option: LWIP_DHCP_AUTOIP_COOP_TRIES. It can be set to a very low value (1) to get an AutoIP address immediately after boot. Documented in opt.h, the default value provides the same behaviour as 1.3.0.
    • DNS supports a static hosts table and DNS_LOOKUP_LOCAL_EXTERN() can be defined as an external function for lookup.
    • SYS_LIGHTWEIGHT_PROT now works with NO_SYS=1
    • Newline characters correctly handled in inet_aton()
    • Compilation on 64-bit hosts fixed
    • 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