1This file lists major changes between release versions that require
2ports or applications to be changed. Use it to update a port or an
3application written for an older version of lwIP to correctly work
4with newer versions.
5
6
7(git master)
8
9  * [Enter new changes just after this line - do not remove this line]
10
11(2.0.1)
12
13  ++ Application changes:
14
15  * UDP does NOT receive multicast traffic from ALL netifs on an UDP PCB bound to a specific
16    netif any more. Users need to bind to IP_ADDR_ANY to receive multicast traffic and compare 
17    ip_current_netif() to the desired netif for every packet.
18    See bug #49662 for an explanation.
19
20(2.0.0)
21
22  ++ Application changes:
23
24  * Changed netif "up" flag handling to be an administrative flag (as opposed to the previous meaning of
25    "ip4-address-valid", a netif will now not be used for transmission if not up) -> even a DHCP netif
26    has to be set "up" before starting the DHCP client
27  * Added IPv6 support (dual-stack or IPv4/IPv6 only)
28  * Changed ip_addr_t to be a union in dual-stack mode (use ip4_addr_t where referring to IPv4 only).
29  * Major rewrite of SNMP (added MIB parser that creates code stubs for custom MIBs);
30    supports SNMPv2c (experimental v3 support)
31  * Moved some core applications from contrib repository to src/apps (and include/lwip/apps)
32
33  +++ Raw API:
34    * Changed TCP listen backlog: removed tcp_accepted(), added the function pair tcp_backlog_delayed()/
35      tcp_backlog_accepted() to explicitly delay backlog handling on a connection pcb
36
37  +++ Socket API:
38    * Added an implementation for posix sendmsg()
39    * Added LWIP_FIONREAD_LINUXMODE that makes ioctl/FIONREAD return the size of the next pending datagram
40
41  ++ Port changes
42
43  +++ new files:
44    * MANY new and moved files! 
45    * Added src/Filelists.mk for use in Makefile projects
46    * Continued moving stack-internal parts from abc.h to abc_priv.h in sub-folder "priv"
47      to let abc.h only contain the actual application programmer's API
48
49  +++ sys layer:
50    * Made LWIP_TCPIP_CORE_LOCKING==1 the default as it usually performs better than
51      the traditional message passing (although with LWIP_COMPAT_MUTEX you are still
52      open to priority inversion, so this is not recommended any more)
53    * Added LWIP_NETCONN_SEM_PER_THREAD to use one "op_completed" semaphore per thread
54      instead of using one per netconn (these semaphores are used even with core locking
55      enabled as some longer lasting functions like big writes still need to delay)
56    * Added generalized abstraction for itoa(), strnicmp(), stricmp() and strnstr()
57      in def.h (to be overridden in cc.h) instead of config 
58      options for netbiosns, httpd, dns, etc. ...
59    * New abstraction for hton* and ntoh* functions in def.h.
60      To override them, use the following in cc.h: 
61      #define lwip_htons(x) <your_htons>
62      #define lwip_htonl(x) <your_htonl>
63
64  +++ new options:
65     * TODO
66
67  +++ new pools:
68     * Added LWIP_MEMPOOL_* (declare/init/alloc/free) to declare private memp pools
69       that share memp.c code but do not have to be made global via lwippools.h
70     * Added pools for IPv6, MPU_COMPATIBLE, dns-api, netif-api, etc.
71     * added hook LWIP_HOOK_MEMP_AVAILABLE() to get informed when a memp pool was empty and an item
72       is now available
73
74  * Signature of LWIP_HOOK_VLAN_SET macro was changed
75
76  * LWIP_DECLARE_MEMORY_ALIGNED() may be used to declare aligned memory buffers (mem/memp)
77    or to move buffers to dedicated memory using compiler attributes
78
79  * Standard C headers are used to define sized types and printf formatters
80    (disable by setting LWIP_NO_STDINT_H=1 or LWIP_NO_INTTYPES_H=1 if your compiler
81    does not support these)
82
83
84  ++ Major bugfixes/improvements
85
86  * Added IPv6 support (dual-stack or IPv4/IPv6 only)
87  * Major rewrite of PPP (incl. keep-up with apache pppd)
88    see doc/ppp.txt for an upgrading how-to
89  * Major rewrite of SNMP (incl. MIB parser)
90  * Fixed timing issues that might have lead to losing a DHCP lease
91  * Made rx processing path more robust against crafted errors
92  * TCP window scaling support
93  * modification of api modules to support FreeRTOS-MPU (don't pass stack-pointers to other threads)
94  * made DNS client more robust
95  * support PBUF_REF for RX packets
96  * LWIP_NETCONN_FULLDUPLEX allows netconn/sockets to be used for reading/writing from separate
97    threads each (needs LWIP_NETCONN_SEM_PER_THREAD)
98  * Moved and reordered stats (mainly memp/mib2)
99
100(1.4.0)
101
102  ++ Application changes:
103
104  * Replaced struct ip_addr by typedef ip_addr_t (struct ip_addr is kept for
105    compatibility to old applications, but will be removed in the future).
106
107  * Renamed mem_realloc() to mem_trim() to prevent confusion with realloc()
108
109  +++ Raw API:
110    * Changed the semantics of tcp_close() (since it was rather a
111      shutdown before): Now the application does *NOT* get any calls to the recv
112      callback (aside from NULL/closed) after calling tcp_close()
113
114    * When calling tcp_abort() from a raw API TCP callback function,
115      make sure you return ERR_ABRT to prevent accessing unallocated memory.
116      (ERR_ABRT now means the applicaiton has called tcp_abort!)
117
118  +++ Netconn API:
119    * Changed netconn_receive() and netconn_accept() to return
120      err_t, not a pointer to new data/netconn.
121
122  +++ Socket API:
123    * LWIP_SO_RCVTIMEO: when accept() or recv() time out, they
124      now set errno to EWOULDBLOCK/EAGAIN, not ETIMEDOUT.
125
126    * Added a minimal version of posix fctl() to have a
127      standardised way to set O_NONBLOCK for nonblocking sockets.
128
129  +++ all APIs:
130    * correctly implemented SO(F)_REUSEADDR
131
132  ++ Port changes
133
134  +++ new files:
135
136    * Added 4 new files: def.c, timers.c, timers.h, tcp_impl.h:
137
138    * Moved stack-internal parts of tcp.h to tcp_impl.h, tcp.h now only contains
139      the actual application programmer's API
140  
141    * Separated timer implementation from sys.h/.c, moved to timers.h/.c;
142      Added timer implementation for NO_SYS==1, set NO_SYS_NO_TIMERS==1 if you
143      still want to use your own timer implementation for NO_SYS==0 (as before).
144
145  +++ sys layer:
146
147    * Converted mbox- and semaphore-functions to take pointers to sys_mbox_t/
148      sys_sem_t;
149
150    * Converted sys_mbox_new/sys_sem_new to take pointers and return err_t;
151
152    * Added Mutex concept in sys_arch (define LWIP_COMPAT_MUTEX to let sys.h use
153      binary semaphores instead of mutexes - as before)
154
155  +++ new options:
156
157     * Don't waste memory when chaining segments, added option TCP_OVERSIZE to
158       prevent creating many small pbufs when calling tcp_write with many small
159       blocks of data. Instead, pbufs are allocated larger than needed and the
160       space is used for later calls to tcp_write.
161
162     * Added LWIP_NETIF_TX_SINGLE_PBUF to always copy to try to create single pbufs
163       in tcp_write/udp_send.
164
165    * Added an additional option LWIP_ETHERNET to support ethernet without ARP
166      (necessary for pure PPPoE)
167
168    * Add MEMP_SEPARATE_POOLS to place memory pools in separate arrays. This may
169      be used to place these pools into user-defined memory by using external
170      declaration.
171
172    * Added TCP_SNDQUEUELOWAT corresponding to TCP_SNDLOWAT
173
174  +++ new pools:
175
176     * Netdb uses a memp pool for allocating memory when getaddrinfo() is called,
177       so MEMP_NUM_NETDB has to be set accordingly.
178
179     * DNS_LOCAL_HOSTLIST_IS_DYNAMIC uses a memp pool instead of the heap, so
180       MEMP_NUM_LOCALHOSTLIST has to be set accordingly.
181
182     * Snmp-agent uses a memp pools instead of the heap, so MEMP_NUM_SNMP_* have
183       to be set accordingly.
184
185     * PPPoE uses a MEMP pool instead of the heap, so MEMP_NUM_PPPOE_INTERFACES
186       has to be set accordingly
187
188  * Integrated loopif into netif.c - loopif does not have to be created by the
189    port any more, just define LWIP_HAVE_LOOPIF to 1.
190
191  * Added define LWIP_RAND() for lwip-wide randomization (needs to be defined
192    in cc.h, e.g. used by igmp)
193
194  * Added printf-formatter X8_F to printf u8_t as hex
195
196  * The heap now may be moved to user-defined memory by defining
197    LWIP_RAM_HEAP_POINTER as a void pointer to that memory's address
198
199  * added autoip_set_struct() and dhcp_set_struct() to let autoip and dhcp work
200    with user-allocated structs instead of calling mem_malloc
201
202  * Added const char* name to mem- and memp-stats for easier debugging.
203
204  * Calculate the TCP/UDP checksum while copying to only fetch data once:
205    Define LWIP_CHKSUM_COPY to a memcpy-like function that returns the checksum
206
207  * Added SO_REUSE_RXTOALL to pass received UDP broadcast/multicast packets to
208    more than one pcb.
209
210  * Changed the semantics of ARP_QUEUEING==0: ARP_QUEUEING now cannot be turned
211    off any more, if this is set to 0, only one packet (the most recent one) is
212    queued (like demanded by RFC 1122).
213
214  
215  ++ Major bugfixes/improvements
216
217  * Implemented tcp_shutdown() to only shut down one end of a connection
218  * Implemented shutdown() at socket- and netconn-level
219  * Added errorset support to select() + improved select speed overhead
220  * Merged pppd to v2.3.11 (including some backported bugfixes from 2.4.x)
221  * Added timer implementation for NO_SYS==1 (may be disabled with NO_SYS_NO_TIMERS==1
222  * Use macros defined in ip_addr.h to work with IP addresses
223  * Implemented many nonblocking socket/netconn functions
224  * Fixed ARP input processing: only add a new entry if a request was directed as us
225  * mem_realloc() to mem_trim() to prevent confusion with realloc()
226  * Some improvements for AutoIP (don't route/forward link-local addresses, don't break
227    existing connections when assigning a routable address)
228  * Correctly handle remote side overrunning our rcv_wnd in ooseq case
229  * Removed packing from ip_addr_t, the packed version is now only used in protocol headers
230  * Corrected PBUF_POOL_BUFSIZE for ports where ETH_PAD_SIZE > 0
231  * Added support for static ARP table entries
232
233(STABLE-1.3.2)
234
235  * initial version of this file
236