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