https://git.reactos.org/?p=reactos.git;a=commitdiff;h=d6eebaa47a90f7a4c182b…
commit d6eebaa47a90f7a4c182beb5a53f7d903cb9ea62
Author: Hervé Poussineau <hpoussin(a)reactos.org>
AuthorDate: Sat Apr 20 20:26:04 2024 +0200
Commit: Hervé Poussineau <hpoussin(a)reactos.org>
CommitDate: Sun Nov 3 22:49:45 2024 +0100
[TCPIP] Synchronize LWIP code to 2.2.0
- take code from STABLE-2_2_0_RELEASE commit on https://git.savannah.gnu.org/git/lwip.git
- remove lwip/contrib directory
- do required changes due to upgrade in
* CMakeLists.txt
* include/lwip/arch/cc.h
* include/lwip/arch/sys_arch.h
* include/lwip/lwipopts.h
* include/tcpip.h
* ip/CMakeLists.txt
* ip/lwip_glue/lwip_glue.h
* ip/lwip_glue/tcp.c
* ip/transport/tcp/if.c
* tcpip/icmp.c
CORE-13098
---
drivers/network/tcpip/CMakeLists.txt | 3 +-
drivers/network/tcpip/include/lwip/arch/cc.h | 17 -
drivers/network/tcpip/include/lwip/arch/sys_arch.h | 3 +
drivers/network/tcpip/include/lwip/lwipopts.h | 1 +
drivers/network/tcpip/include/tcpip.h | 1 +
drivers/network/tcpip/ip/CMakeLists.txt | 1 +
drivers/network/tcpip/ip/lwip_glue/lwip_glue.h | 1 -
drivers/network/tcpip/ip/lwip_glue/tcp.c | 6 +-
drivers/network/tcpip/ip/transport/tcp/if.c | 2 +-
drivers/network/tcpip/lwip/.gitattributes | 10 +
drivers/network/tcpip/lwip/.gitignore | 60 +
drivers/network/tcpip/lwip/BUILDING | 119 +
drivers/network/tcpip/lwip/CHANGELOG | 1620 ++++++-
drivers/network/tcpip/lwip/CMakeLists.txt | 79 +-
drivers/network/tcpip/lwip/COPYING | 54 +-
drivers/network/tcpip/lwip/FEATURES | 11 +
drivers/network/tcpip/lwip/FILES | 2 +
drivers/network/tcpip/lwip/README | 100 +-
drivers/network/tcpip/lwip/UPGRADING | 146 +-
.../network/tcpip/lwip/codespell_changed_files.sh | 26 +
drivers/network/tcpip/lwip/codespell_check.sh | 57 +
drivers/network/tcpip/lwip/doc/FILES | 8 +-
drivers/network/tcpip/lwip/doc/NO_SYS_SampleCode.c | 121 +
drivers/network/tcpip/lwip/doc/ZeroCopyRx.c | 45 +
drivers/network/tcpip/lwip/doc/contrib.txt | 17 +-
.../network/tcpip/lwip/doc/doxygen/generate.bat | 1 +
drivers/network/tcpip/lwip/doc/doxygen/generate.sh | 3 +
.../network/tcpip/lwip/doc/doxygen/lwip.Doxyfile | 2516 ++++++++++
.../tcpip/lwip/doc/doxygen/lwip.Doxyfile.cmake.in | 2516 ++++++++++
drivers/network/tcpip/lwip/doc/doxygen/main_page.h | 417 ++
.../tcpip/lwip/doc/doxygen/output/index.html | 10 +
drivers/network/tcpip/lwip/doc/mdns.txt | 111 +
drivers/network/tcpip/lwip/doc/mqtt_client.txt | 164 +
drivers/network/tcpip/lwip/doc/ppp.txt | 529 +++
drivers/network/tcpip/lwip/doc/rawapi.txt | 511 ---
drivers/network/tcpip/lwip/doc/savannah.txt | 135 +-
drivers/network/tcpip/lwip/doc/snmp_agent.txt | 181 -
drivers/network/tcpip/lwip/doc/sys_arch.txt | 267 --
drivers/network/tcpip/lwip/src/FILES | 6 +-
drivers/network/tcpip/lwip/src/Filelists.cmake | 293 ++
drivers/network/tcpip/lwip/src/Filelists.mk | 208 +
drivers/network/tcpip/lwip/src/api/api_lib.c | 1067 ++++-
drivers/network/tcpip/lwip/src/api/api_msg.c | 1672 ++++---
drivers/network/tcpip/lwip/src/api/err.c | 102 +-
drivers/network/tcpip/lwip/src/api/if_api.c | 102 +
drivers/network/tcpip/lwip/src/api/netbuf.c | 83 +-
drivers/network/tcpip/lwip/src/api/netdb.c | 199 +-
drivers/network/tcpip/lwip/src/api/netifapi.c | 358 +-
drivers/network/tcpip/lwip/src/api/sockets.c | 4793 ++++++++++++++------
drivers/network/tcpip/lwip/src/api/tcpip.c | 588 ++-
.../lwip/src/apps/altcp_tls/altcp_tls_mbedtls.c | 1367 ++++++
.../src/apps/altcp_tls/altcp_tls_mbedtls_mem.c | 210 +
.../altcp_tls/altcp_tls_mbedtls_mem.h} | 56 +-
.../altcp_tls/altcp_tls_mbedtls_structs.h} | 67 +-
.../tcpip/lwip/src/apps/http/altcp_proxyconnect.c | 584 +++
drivers/network/tcpip/lwip/src/apps/http/fs.c | 161 +
.../network/tcpip/lwip/src/apps/http/fs/404.html | 21 +
.../tcpip/lwip/src/apps/http/fs/img/sics.gif | Bin 0 -> 724 bytes
.../network/tcpip/lwip/src/apps/http/fs/index.html | 47 +
drivers/network/tcpip/lwip/src/apps/http/fsdata.c | 336 ++
.../src/{core/ipv4/inet.c => apps/http/fsdata.h} | 17 +-
.../network/tcpip/lwip/src/apps/http/http_client.c | 911 ++++
drivers/network/tcpip/lwip/src/apps/http/httpd.c | 2770 +++++++++++
.../tcpip/lwip/src/apps/http/httpd_structs.h | 123 +
.../tcpip/lwip/src/apps/http/makefsdata/makefsdata | 97 +
.../lwip/src/apps/http/makefsdata/makefsdata.c | 1307 ++++++
.../tcpip/lwip/src/apps/http/makefsdata/readme.txt | 23 +
.../tcpip/lwip/src/apps/http/makefsdata/tinydir.h | 831 ++++
.../network/tcpip/lwip/src/apps/lwiperf/lwiperf.c | 847 ++++
drivers/network/tcpip/lwip/src/apps/mdns/mdns.c | 2855 ++++++++++++
.../network/tcpip/lwip/src/apps/mdns/mdns_domain.c | 635 +++
.../network/tcpip/lwip/src/apps/mdns/mdns_out.c | 1163 +++++
drivers/network/tcpip/lwip/src/apps/mqtt/mqtt.c | 1480 ++++++
.../tcpip/lwip/src/apps/netbiosns/netbiosns.c | 533 +++
drivers/network/tcpip/lwip/src/apps/smtp/smtp.c | 1554 +++++++
.../network/tcpip/lwip/src/apps/snmp/snmp_asn1.c | 704 +++
.../network/tcpip/lwip/src/apps/snmp/snmp_asn1.h | 113 +
.../network/tcpip/lwip/src/apps/snmp/snmp_core.c | 1356 ++++++
.../tcpip/lwip/src/apps/snmp/snmp_core_priv.h | 91 +
.../network/tcpip/lwip/src/apps/snmp/snmp_mib2.c | 116 +
.../tcpip/lwip/src/apps/snmp/snmp_mib2_icmp.c | 182 +
.../lwip/src/apps/snmp/snmp_mib2_interfaces.c | 368 ++
.../tcpip/lwip/src/apps/snmp/snmp_mib2_ip.c | 731 +++
.../tcpip/lwip/src/apps/snmp/snmp_mib2_snmp.c | 227 +
.../tcpip/lwip/src/apps/snmp/snmp_mib2_system.c | 376 ++
.../tcpip/lwip/src/apps/snmp/snmp_mib2_tcp.c | 607 +++
.../tcpip/lwip/src/apps/snmp/snmp_mib2_udp.c | 372 ++
.../network/tcpip/lwip/src/apps/snmp/snmp_msg.c | 1981 ++++++++
.../network/tcpip/lwip/src/apps/snmp/snmp_msg.h | 185 +
.../tcpip/lwip/src/apps/snmp/snmp_netconn.c | 122 +
.../tcpip/lwip/src/apps/snmp/snmp_pbuf_stream.c | 156 +
.../{core/sys.c => apps/snmp/snmp_pbuf_stream.h} | 58 +-
.../network/tcpip/lwip/src/apps/snmp/snmp_raw.c | 103 +
.../network/tcpip/lwip/src/apps/snmp/snmp_scalar.c | 232 +
.../lwip/src/apps/snmp/snmp_snmpv2_framework.c | 90 +
.../tcpip/lwip/src/apps/snmp/snmp_snmpv2_usm.c | 410 ++
.../network/tcpip/lwip/src/apps/snmp/snmp_table.c | 342 ++
.../tcpip/lwip/src/apps/snmp/snmp_threadsync.c | 231 +
.../network/tcpip/lwip/src/apps/snmp/snmp_traps.c | 900 ++++
drivers/network/tcpip/lwip/src/apps/snmp/snmpv3.c | 136 +
.../tcpip/lwip/src/apps/snmp/snmpv3_mbedtls.c | 342 ++
.../src/{core/sys.c => apps/snmp/snmpv3_priv.h} | 65 +-
drivers/network/tcpip/lwip/src/apps/sntp/sntp.c | 948 ++++
drivers/network/tcpip/lwip/src/apps/tftp/tftp.c | 548 +++
drivers/network/tcpip/lwip/src/core/altcp.c | 717 +++
.../tcpip/lwip/src/core/{sys.c => altcp_alloc.c} | 67 +-
drivers/network/tcpip/lwip/src/core/altcp_tcp.c | 578 +++
drivers/network/tcpip/lwip/src/core/def.c | 231 +-
drivers/network/tcpip/lwip/src/core/dhcp.c | 1770 --------
drivers/network/tcpip/lwip/src/core/dns.c | 1449 ++++--
.../tcpip/lwip/src/core/{ipv4 => }/inet_chksum.c | 366 +-
drivers/network/tcpip/lwip/src/core/init.c | 306 +-
drivers/network/tcpip/lwip/src/core/ip.c | 167 +
drivers/network/tcpip/lwip/src/core/ipv4/acd.c | 557 +++
drivers/network/tcpip/lwip/src/core/ipv4/autoip.c | 543 +--
drivers/network/tcpip/lwip/src/core/ipv4/dhcp.c | 1999 ++++++++
.../tcpip/lwip/src/{netif => core/ipv4}/etharp.c | 998 ++--
drivers/network/tcpip/lwip/src/core/ipv4/icmp.c | 384 +-
drivers/network/tcpip/lwip/src/core/ipv4/igmp.c | 772 ++--
drivers/network/tcpip/lwip/src/core/ipv4/ip.c | 924 ----
drivers/network/tcpip/lwip/src/core/ipv4/ip4.c | 1166 +++++
.../lwip/src/core/ipv4/{ip_addr.c => ip4_addr.c} | 197 +-
.../lwip/src/core/ipv4/{ip_frag.c => ip4_frag.c} | 497 +-
drivers/network/tcpip/lwip/src/core/ipv6/README | 1 -
drivers/network/tcpip/lwip/src/core/ipv6/dhcp6.c | 821 ++++
drivers/network/tcpip/lwip/src/core/ipv6/ethip6.c | 123 +
drivers/network/tcpip/lwip/src/core/ipv6/icmp6.c | 442 +-
drivers/network/tcpip/lwip/src/core/ipv6/inet6.c | 162 +-
drivers/network/tcpip/lwip/src/core/ipv6/ip6.c | 1591 ++++++-
.../network/tcpip/lwip/src/core/ipv6/ip6_addr.c | 371 +-
.../network/tcpip/lwip/src/core/ipv6/ip6_frag.c | 862 ++++
drivers/network/tcpip/lwip/src/core/ipv6/mld6.c | 626 +++
drivers/network/tcpip/lwip/src/core/ipv6/nd6.c | 2474 ++++++++++
drivers/network/tcpip/lwip/src/core/mem.c | 582 ++-
drivers/network/tcpip/lwip/src/core/memp.c | 611 ++-
drivers/network/tcpip/lwip/src/core/netif.c | 1845 ++++++--
drivers/network/tcpip/lwip/src/core/pbuf.c | 1128 +++--
drivers/network/tcpip/lwip/src/core/raw.c | 489 +-
.../network/tcpip/lwip/src/core/snmp/asn1_dec.c | 657 ---
.../network/tcpip/lwip/src/core/snmp/asn1_enc.c | 611 ---
drivers/network/tcpip/lwip/src/core/snmp/mib2.c | 4146 -----------------
.../network/tcpip/lwip/src/core/snmp/mib_structs.c | 1174 -----
drivers/network/tcpip/lwip/src/core/snmp/msg_in.c | 1453 ------
drivers/network/tcpip/lwip/src/core/snmp/msg_out.c | 674 ---
drivers/network/tcpip/lwip/src/core/stats.c | 144 +-
drivers/network/tcpip/lwip/src/core/sys.c | 80 +
drivers/network/tcpip/lwip/src/core/tcp.c | 1902 ++++++--
drivers/network/tcpip/lwip/src/core/tcp_in.c | 1709 ++++---
drivers/network/tcpip/lwip/src/core/tcp_out.c | 1712 +++++--
drivers/network/tcpip/lwip/src/core/timeouts.c | 451 ++
drivers/network/tcpip/lwip/src/core/timers.c | 487 --
drivers/network/tcpip/lwip/src/core/udp.c | 1076 +++--
.../sys/socket.h => compat/posix/arpa/inet.h} | 22 +-
.../ipv4/inet.c => include/compat/posix/net/if.h} | 12 +-
.../lwip/src/include/{ => compat}/posix/netdb.h | 22 +-
.../src/include/{ => compat}/posix/sys/socket.h | 22 +-
.../ipv4/inet.c => include/compat/stdc/errno.h} | 13 +-
.../tcpip/lwip/src/include/ipv4/lwip/autoip.h | 118 -
.../tcpip/lwip/src/include/ipv4/lwip/inet.h | 107 -
.../network/tcpip/lwip/src/include/ipv4/lwip/ip.h | 223 -
.../tcpip/lwip/src/include/ipv6/lwip/icmp.h | 100 -
.../network/tcpip/lwip/src/include/ipv6/lwip/ip.h | 130 -
drivers/network/tcpip/lwip/src/include/lwip/acd.h | 109 +
.../network/tcpip/lwip/src/include/lwip/altcp.h | 207 +
.../src/{core/sys.c => include/lwip/altcp_tcp.h} | 56 +-
.../tcpip/lwip/src/include/lwip/altcp_tls.h | 196 +
drivers/network/tcpip/lwip/src/include/lwip/api.h | 325 +-
.../network/tcpip/lwip/src/include/lwip/api_msg.h | 177 -
.../network/tcpip/lwip/src/include/lwip/apps/FILES | 2 +
.../lwip/apps/altcp_proxyconnect.h} | 63 +-
.../src/include/lwip/apps/altcp_tls_mbedtls_opts.h | 111 +
.../network/tcpip/lwip/src/include/lwip/apps/fs.h | 139 +
.../tcpip/lwip/src/include/lwip/apps/http_client.h | 160 +
.../tcpip/lwip/src/include/lwip/apps/httpd.h | 256 ++
.../tcpip/lwip/src/include/lwip/apps/httpd_opts.h | 416 ++
.../tcpip/lwip/src/include/lwip/apps/lwiperf.h | 109 +
.../tcpip/lwip/src/include/lwip/apps/mdns.h | 154 +
.../tcpip/lwip/src/include/lwip/apps/mdns_domain.h | 80 +
.../tcpip/lwip/src/include/lwip/apps/mdns_opts.h | 121 +
.../tcpip/lwip/src/include/lwip/apps/mdns_out.h | 138 +
.../tcpip/lwip/src/include/lwip/apps/mdns_priv.h | 237 +
.../tcpip/lwip/src/include/lwip/apps/mqtt.h | 205 +
.../{core/sys.c => include/lwip/apps/mqtt_opts.h} | 85 +-
.../tcpip/lwip/src/include/lwip/apps/mqtt_priv.h | 104 +
.../ipv4/inet.c => include/lwip/apps/netbiosns.h} | 27 +-
.../sys.c => include/lwip/apps/netbiosns_opts.h} | 56 +-
.../tcpip/lwip/src/include/lwip/apps/smtp.h | 128 +
.../tcpip/lwip/src/include/lwip/apps/smtp_opts.h | 80 +
.../tcpip/lwip/src/include/lwip/apps/snmp.h | 145 +
.../tcpip/lwip/src/include/lwip/apps/snmp_core.h | 377 ++
.../{core/sys.c => include/lwip/apps/snmp_mib2.h} | 64 +-
.../tcpip/lwip/src/include/lwip/apps/snmp_opts.h | 297 ++
.../tcpip/lwip/src/include/lwip/apps/snmp_scalar.h | 113 +
.../src/include/lwip/apps/snmp_snmpv2_framework.h | 32 +
.../lwip/src/include/lwip/apps/snmp_snmpv2_usm.h | 24 +
.../tcpip/lwip/src/include/lwip/apps/snmp_table.h | 134 +
.../lwip/src/include/lwip/apps/snmp_threadsync.h | 114 +
.../tcpip/lwip/src/include/lwip/apps/snmpv3.h | 114 +
.../src/{core/sys.c => include/lwip/apps/sntp.h} | 69 +-
.../tcpip/lwip/src/include/lwip/apps/sntp_opts.h | 215 +
.../tcpip/lwip/src/include/lwip/apps/tftp_client.h | 50 +
.../tcpip/lwip/src/include/lwip/apps/tftp_common.h | 108 +
.../tcpip/lwip/src/include/lwip/apps/tftp_opts.h | 106 +
.../inet.c => include/lwip/apps/tftp_server.h} | 38 +-
drivers/network/tcpip/lwip/src/include/lwip/arch.h | 511 ++-
.../network/tcpip/lwip/src/include/lwip/autoip.h | 90 +
.../network/tcpip/lwip/src/include/lwip/debug.h | 140 +-
drivers/network/tcpip/lwip/src/include/lwip/def.h | 179 +-
drivers/network/tcpip/lwip/src/include/lwip/dhcp.h | 293 +-
.../network/tcpip/lwip/src/include/lwip/dhcp6.h | 104 +
drivers/network/tcpip/lwip/src/include/lwip/dns.h | 97 +-
drivers/network/tcpip/lwip/src/include/lwip/err.h | 114 +-
.../network/tcpip/lwip/src/include/lwip/errno.h | 198 +
.../network/tcpip/lwip/src/include/lwip/etharp.h | 110 +
.../lwip/src/{core/sys.c => include/lwip/ethip6.h} | 52 +-
drivers/network/tcpip/lwip/src/include/lwip/icmp.h | 110 +
.../lwip/src/{core/sys.c => include/lwip/icmp6.h} | 56 +-
.../lwip/src/{core/sys.c => include/lwip/if_api.h} | 56 +-
.../tcpip/lwip/src/include/{ipv4 => }/lwip/igmp.h | 91 +-
drivers/network/tcpip/lwip/src/include/lwip/inet.h | 188 +
.../lwip/src/include/{ipv4 => }/lwip/inet_chksum.h | 94 +-
drivers/network/tcpip/lwip/src/include/lwip/init.h | 82 +-
.../src/include/lwip/{init.h => init.h.cmake.in} | 82 +-
drivers/network/tcpip/lwip/src/include/lwip/ip.h | 339 ++
drivers/network/tcpip/lwip/src/include/lwip/ip4.h | 109 +
.../{ipv4/lwip/ip_addr.h => lwip/ip4_addr.h} | 187 +-
.../{ipv4/lwip/ip_frag.h => lwip/ip4_frag.h} | 56 +-
drivers/network/tcpip/lwip/src/include/lwip/ip6.h | 93 +
.../network/tcpip/lwip/src/include/lwip/ip6_addr.h | 372 ++
.../network/tcpip/lwip/src/include/lwip/ip6_frag.h | 144 +
.../network/tcpip/lwip/src/include/lwip/ip6_zone.h | 306 ++
.../network/tcpip/lwip/src/include/lwip/ip_addr.h | 468 ++
drivers/network/tcpip/lwip/src/include/lwip/mem.h | 101 +-
drivers/network/tcpip/lwip/src/include/lwip/memp.h | 155 +-
drivers/network/tcpip/lwip/src/include/lwip/mld6.h | 99 +
drivers/network/tcpip/lwip/src/include/lwip/nd6.h | 90 +
.../network/tcpip/lwip/src/include/lwip/netbuf.h | 61 +-
.../network/tcpip/lwip/src/include/lwip/netdb.h | 68 +-
.../network/tcpip/lwip/src/include/lwip/netif.h | 588 ++-
.../network/tcpip/lwip/src/include/lwip/netifapi.h | 187 +-
drivers/network/tcpip/lwip/src/include/lwip/opt.h | 2712 ++++++++---
drivers/network/tcpip/lwip/src/include/lwip/pbuf.h | 240 +-
.../tcpip/lwip/src/include/lwip/priv/altcp_priv.h | 159 +
.../tcpip/lwip/src/include/lwip/priv/api_msg.h | 272 ++
.../tcpip/lwip/src/include/lwip/priv/mem_priv.h | 84 +
.../tcpip/lwip/src/include/lwip/priv/memp_priv.h | 161 +
.../lwip/src/include/lwip/{ => priv}/memp_std.h | 79 +-
.../tcpip/lwip/src/include/lwip/priv/nd6_priv.h | 143 +
.../{core/sys.c => include/lwip/priv/raw_priv.h} | 49 +-
.../lwip/src/include/lwip/priv/sockets_priv.h | 175 +
.../include/lwip/{tcp_impl.h => priv/tcp_priv.h} | 261 +-
.../tcpip/lwip/src/include/lwip/priv/tcpip_priv.h | 176 +
.../network/tcpip/lwip/src/include/lwip/prot/acd.h | 91 +
.../ipv4/inet.c => include/lwip/prot/autoip.h} | 37 +-
.../tcpip/lwip/src/include/lwip/prot/dhcp.h | 178 +
.../tcpip/lwip/src/include/lwip/prot/dhcp6.h | 138 +
.../tcpip/lwip/src/include/lwip/{ => prot}/dns.h | 136 +-
.../{ipv6/lwip/ip_addr.h => lwip/prot/etharp.h} | 111 +-
.../tcpip/lwip/src/include/lwip/prot/ethernet.h | 127 +
.../src/{core/sys.c => include/lwip/prot/iana.h} | 81 +-
.../src/include/{ipv4/lwip => lwip/prot}/icmp.h | 102 +-
.../tcpip/lwip/src/include/lwip/prot/icmp6.h | 172 +
.../src/{core/sys.c => include/lwip/prot/ieee.h} | 77 +-
.../src/{core/sys.c => include/lwip/prot/igmp.h} | 70 +-
.../{core/ipv4/inet.c => include/lwip/prot/ip.h} | 25 +-
.../network/tcpip/lwip/src/include/lwip/prot/ip4.h | 131 +
.../network/tcpip/lwip/src/include/lwip/prot/ip6.h | 235 +
.../src/{core/sys.c => include/lwip/prot/mld6.h} | 57 +-
.../network/tcpip/lwip/src/include/lwip/prot/nd6.h | 274 ++
.../network/tcpip/lwip/src/include/lwip/prot/tcp.h | 100 +
.../include/{ipv6/lwip/inet.h => lwip/prot/udp.h} | 78 +-
drivers/network/tcpip/lwip/src/include/lwip/raw.h | 67 +-
drivers/network/tcpip/lwip/src/include/lwip/sio.h | 57 +-
drivers/network/tcpip/lwip/src/include/lwip/snmp.h | 402 +-
.../tcpip/lwip/src/include/lwip/snmp_asn1.h | 101 -
.../network/tcpip/lwip/src/include/lwip/snmp_msg.h | 315 --
.../tcpip/lwip/src/include/lwip/snmp_structs.h | 268 --
.../network/tcpip/lwip/src/include/lwip/sockets.h | 528 ++-
.../network/tcpip/lwip/src/include/lwip/stats.h | 279 +-
drivers/network/tcpip/lwip/src/include/lwip/sys.h | 386 +-
drivers/network/tcpip/lwip/src/include/lwip/tcp.h | 327 +-
.../src/{core/sys.c => include/lwip/tcpbase.h} | 70 +-
.../network/tcpip/lwip/src/include/lwip/tcpip.h | 161 +-
.../lwip/src/include/lwip/{timers.h => timeouts.h} | 86 +-
drivers/network/tcpip/lwip/src/include/lwip/udp.h | 132 +-
.../tcpip/lwip/src/include/netif/bridgeif.h | 127 +
.../tcpip/lwip/src/include/netif/bridgeif_opts.h | 90 +
.../network/tcpip/lwip/src/include/netif/etharp.h | 225 +-
.../src/{core/sys.c => include/netif/ethernet.h} | 59 +-
.../tcpip/lwip/src/include/netif/ieee802154.h | 112 +
.../src/{core/sys.c => include/netif/lowpan6.h} | 73 +-
.../tcpip/lwip/src/include/netif/lowpan6_ble.h | 78 +
.../tcpip/lwip/src/include/netif/lowpan6_common.h | 82 +
.../tcpip/lwip/src/include/netif/lowpan6_opts.h | 122 +
.../network/tcpip/lwip/src/include/netif/ppp/ccp.h | 164 +
.../tcpip/lwip/src/include/netif/ppp/chap-md5.h | 36 +
.../tcpip/lwip/src/include/netif/ppp/chap-new.h | 200 +
.../tcpip/lwip/src/include/netif/ppp/chap_ms.h | 44 +
.../network/tcpip/lwip/src/include/netif/ppp/eap.h | 169 +
.../network/tcpip/lwip/src/include/netif/ppp/ecp.h | 62 +
.../tcpip/lwip/src/include/netif/ppp/eui64.h | 102 +
.../network/tcpip/lwip/src/include/netif/ppp/fsm.h | 182 +
.../tcpip/lwip/src/include/netif/ppp/ipcp.h | 134 +
.../tcpip/lwip/src/include/netif/ppp/ipv6cp.h | 191 +
.../network/tcpip/lwip/src/include/netif/ppp/lcp.h | 179 +
.../tcpip/lwip/src/include/netif/ppp/magic.h | 130 +
.../tcpip/lwip/src/include/netif/ppp/mppe.h | 181 +
.../lwip/src/include/netif/ppp/polarssl/arc4.h | 81 +
.../lwip/src/include/netif/ppp/polarssl/des.h | 92 +
.../lwip/src/include/netif/ppp/polarssl/md4.h | 97 +
.../lwip/src/include/netif/ppp/polarssl/md5.h | 96 +
.../lwip/src/include/netif/ppp/polarssl/sha1.h | 96 +
.../network/tcpip/lwip/src/include/netif/ppp/ppp.h | 698 +++
.../tcpip/lwip/src/include/netif/ppp/ppp_impl.h | 736 +++
.../tcpip/lwip/src/include/netif/ppp/ppp_opts.h | 610 +++
.../tcpip/lwip/src/include/netif/ppp/pppapi.h | 137 +
.../tcpip/lwip/src/include/netif/ppp/pppcrypt.h | 144 +
.../lwip/src/{ => include}/netif/ppp/pppdebug.h | 45 +-
.../src/include/netif/{ppp_oe.h => ppp/pppoe.h} | 71 +-
.../tcpip/lwip/src/include/netif/ppp/pppol2tp.h | 209 +
.../tcpip/lwip/src/include/netif/ppp/pppos.h | 125 +
.../tcpip/lwip/src/include/netif/ppp/upap.h | 131 +
.../tcpip/lwip/src/{ => include}/netif/ppp/vj.h | 53 +-
.../network/tcpip/lwip/src/include/netif/slipif.h | 63 +-
.../lwip/src/{core/sys.c => include/netif/zepif.h} | 65 +-
drivers/network/tcpip/lwip/src/netif/FILES | 28 +-
drivers/network/tcpip/lwip/src/netif/bridgeif.c | 563 +++
.../network/tcpip/lwip/src/netif/bridgeif_fdb.c | 212 +
drivers/network/tcpip/lwip/src/netif/ethernet.c | 329 ++
drivers/network/tcpip/lwip/src/netif/ethernetif.c | 317 --
drivers/network/tcpip/lwip/src/netif/lowpan6.c | 921 ++++
drivers/network/tcpip/lwip/src/netif/lowpan6_ble.c | 447 ++
.../network/tcpip/lwip/src/netif/lowpan6_common.c | 841 ++++
.../network/tcpip/lwip/src/netif/ppp/PPPD_FOLLOWUP | 473 ++
drivers/network/tcpip/lwip/src/netif/ppp/auth.c | 2989 ++++++++----
drivers/network/tcpip/lwip/src/netif/ppp/auth.h | 111 -
drivers/network/tcpip/lwip/src/netif/ppp/ccp.c | 1740 +++++++
.../network/tcpip/lwip/src/netif/ppp/chap-md5.c | 126 +
.../network/tcpip/lwip/src/netif/ppp/chap-new.c | 677 +++
drivers/network/tcpip/lwip/src/netif/ppp/chap.c | 908 ----
drivers/network/tcpip/lwip/src/netif/ppp/chap.h | 150 -
drivers/network/tcpip/lwip/src/netif/ppp/chap_ms.c | 962 ++++
drivers/network/tcpip/lwip/src/netif/ppp/chpms.c | 396 --
drivers/network/tcpip/lwip/src/netif/ppp/chpms.h | 64 -
drivers/network/tcpip/lwip/src/netif/ppp/demand.c | 465 ++
drivers/network/tcpip/lwip/src/netif/ppp/eap.c | 2441 ++++++++++
drivers/network/tcpip/lwip/src/netif/ppp/ecp.c | 191 +
drivers/network/tcpip/lwip/src/netif/ppp/eui64.c | 56 +
drivers/network/tcpip/lwip/src/netif/ppp/fsm.c | 1373 +++---
drivers/network/tcpip/lwip/src/netif/ppp/fsm.h | 157 -
drivers/network/tcpip/lwip/src/netif/ppp/ipcp.c | 3365 +++++++++-----
drivers/network/tcpip/lwip/src/netif/ppp/ipcp.h | 106 -
drivers/network/tcpip/lwip/src/netif/ppp/ipv6cp.c | 1533 +++++++
drivers/network/tcpip/lwip/src/netif/ppp/lcp.c | 4200 ++++++++++-------
drivers/network/tcpip/lwip/src/netif/ppp/lcp.h | 151 -
drivers/network/tcpip/lwip/src/netif/ppp/magic.c | 278 +-
drivers/network/tcpip/lwip/src/netif/ppp/magic.h | 63 -
drivers/network/tcpip/lwip/src/netif/ppp/md5.c | 320 --
drivers/network/tcpip/lwip/src/netif/ppp/md5.h | 55 -
drivers/network/tcpip/lwip/src/netif/ppp/mppe.c | 412 ++
.../network/tcpip/lwip/src/netif/ppp/multilink.c | 609 +++
drivers/network/tcpip/lwip/src/netif/ppp/pap.c | 628 ---
drivers/network/tcpip/lwip/src/netif/ppp/pap.h | 118 -
.../tcpip/lwip/src/netif/ppp/polarssl/README | 22 +
.../tcpip/lwip/src/netif/ppp/polarssl/arc4.c | 101 +
.../tcpip/lwip/src/netif/ppp/polarssl/des.c | 422 ++
.../tcpip/lwip/src/netif/ppp/polarssl/md4.c | 281 ++
.../tcpip/lwip/src/netif/ppp/polarssl/md5.c | 300 ++
.../tcpip/lwip/src/netif/ppp/polarssl/sha1.c | 335 ++
drivers/network/tcpip/lwip/src/netif/ppp/ppp.c | 2912 +++++-------
drivers/network/tcpip/lwip/src/netif/ppp/ppp.h | 201 -
.../network/tcpip/lwip/src/netif/ppp/ppp_impl.h | 363 --
drivers/network/tcpip/lwip/src/netif/ppp/pppapi.c | 427 ++
.../network/tcpip/lwip/src/netif/ppp/pppcrypt.c | 66 +
.../tcpip/lwip/src/netif/ppp/{ppp_oe.c => pppoe.c} | 711 +--
.../network/tcpip/lwip/src/netif/ppp/pppol2tp.c | 1171 +++++
drivers/network/tcpip/lwip/src/netif/ppp/pppos.c | 940 ++++
drivers/network/tcpip/lwip/src/netif/ppp/randm.c | 249 -
drivers/network/tcpip/lwip/src/netif/ppp/randm.h | 81 -
drivers/network/tcpip/lwip/src/netif/ppp/upap.c | 679 +++
drivers/network/tcpip/lwip/src/netif/ppp/utils.c | 957 ++++
drivers/network/tcpip/lwip/src/netif/ppp/vj.c | 353 +-
drivers/network/tcpip/lwip/src/netif/slipif.c | 278 +-
drivers/network/tcpip/lwip/src/netif/zepif.c | 300 ++
drivers/network/tcpip/lwip/test/fuzz/Makefile | 73 +
drivers/network/tcpip/lwip/test/fuzz/README | 34 +
drivers/network/tcpip/lwip/test/fuzz/config.h | 0
.../tcpip/lwip/{COPYING => test/fuzz/fuzz.c} | 10 +-
.../tcpip/lwip/{COPYING => test/fuzz/fuzz2.c} | 10 +-
.../{src/core/ipv4/inet.c => test/fuzz/fuzz3.c} | 20 +-
drivers/network/tcpip/lwip/test/fuzz/fuzz_common.c | 702 +++
.../{src/core/sys.c => test/fuzz/fuzz_common.h} | 54 +-
.../tcpip/lwip/test/fuzz/inputs/arp/arp_req.bin | Bin 0 -> 42 bytes
.../tcpip/lwip/test/fuzz/inputs/icmp/icmp_ping.bin | Bin 0 -> 98 bytes
.../fuzz/inputs/ipv6/neighbor_solicitation.bin | Bin 0 -> 86 bytes
.../lwip/test/fuzz/inputs/ipv6/router_adv.bin | Bin 0 -> 118 bytes
.../tcpip/lwip/test/fuzz/inputs/tcp/tcp_syn.bin | Bin 0 -> 74 bytes
.../lwip/test/fuzz/inputs/udp/udp_port_5000.bin | Bin 0 -> 50 bytes
.../tcpip/lwip/test/{unit => fuzz}/lwipopts.h | 68 +-
.../network/tcpip/lwip/test/fuzz/output_to_pcap.sh | 31 +
.../tcpip/lwip/test/sockets/sockets_stresstest.c | 726 +++
.../{COPYING => test/sockets/sockets_stresstest.h} | 13 +-
.../network/tcpip/lwip/test/unit/Filelists.cmake | 38 +
drivers/network/tcpip/lwip/test/unit/Filelists.mk | 54 +
drivers/network/tcpip/lwip/test/unit/Makefile | 11 +
.../tcpip/lwip/test/unit/api/test_sockets.c | 852 ++++
.../tcpip/lwip/test/unit/api/test_sockets.h | 8 +
.../network/tcpip/lwip/test/unit/arch/sys_arch.c | 387 ++
.../network/tcpip/lwip/test/unit/arch/sys_arch.h | 79 +
.../network/tcpip/lwip/test/unit/core/test_def.c | 84 +
.../network/tcpip/lwip/test/unit/core/test_def.h | 8 +
.../network/tcpip/lwip/test/unit/core/test_dns.c | 52 +
.../network/tcpip/lwip/test/unit/core/test_dns.h | 8 +
.../network/tcpip/lwip/test/unit/core/test_mem.c | 168 +-
.../network/tcpip/lwip/test/unit/core/test_mem.h | 4 +-
.../network/tcpip/lwip/test/unit/core/test_netif.c | 285 ++
.../network/tcpip/lwip/test/unit/core/test_netif.h | 8 +
.../network/tcpip/lwip/test/unit/core/test_pbuf.c | 359 ++
.../network/tcpip/lwip/test/unit/core/test_pbuf.h | 8 +
.../tcpip/lwip/test/unit/core/test_timers.c | 233 +
.../tcpip/lwip/test/unit/core/test_timers.h | 8 +
.../network/tcpip/lwip/test/unit/dhcp/test_dhcp.c | 1103 +++++
.../network/tcpip/lwip/test/unit/dhcp/test_dhcp.h | 8 +
.../tcpip/lwip/test/unit/etharp/test_etharp.c | 53 +-
.../tcpip/lwip/test/unit/etharp/test_etharp.h | 4 +-
.../network/tcpip/lwip/test/unit/ip4/test_ip4.c | 342 ++
.../network/tcpip/lwip/test/unit/ip4/test_ip4.h | 8 +
.../network/tcpip/lwip/test/unit/ip6/test_ip6.c | 469 ++
.../network/tcpip/lwip/test/unit/ip6/test_ip6.h | 8 +
drivers/network/tcpip/lwip/test/unit/lwip_check.h | 55 +-
.../network/tcpip/lwip/test/unit/lwip_unittests.c | 84 +-
drivers/network/tcpip/lwip/test/unit/lwipopts.h | 58 +-
.../network/tcpip/lwip/test/unit/mdns/test_mdns.c | 916 ++++
.../network/tcpip/lwip/test/unit/mdns/test_mdns.h | 8 +
.../network/tcpip/lwip/test/unit/mqtt/test_mqtt.c | 115 +
.../network/tcpip/lwip/test/unit/mqtt/test_mqtt.h | 8 +
.../network/tcpip/lwip/test/unit/ppp/test_pppos.c | 67 +
.../network/tcpip/lwip/test/unit/ppp/test_pppos.h | 13 +
.../network/tcpip/lwip/test/unit/tcp/tcp_helper.c | 131 +-
.../network/tcpip/lwip/test/unit/tcp/tcp_helper.h | 16 +-
.../network/tcpip/lwip/test/unit/tcp/test_tcp.c | 1211 ++++-
.../network/tcpip/lwip/test/unit/tcp/test_tcp.h | 4 +-
.../tcpip/lwip/test/unit/tcp/test_tcp_oos.c | 242 +-
.../tcpip/lwip/test/unit/tcp/test_tcp_oos.h | 4 +-
.../tcpip/lwip/test/unit/tcp/test_tcp_state.c | 665 +++
.../tcpip/lwip/test/unit/tcp/test_tcp_state.h | 8 +
.../network/tcpip/lwip/test/unit/udp/test_udp.c | 418 +-
.../network/tcpip/lwip/test/unit/udp/test_udp.h | 4 +-
drivers/network/tcpip/tcpip/icmp.c | 3 -
media/doc/3rd Party Files.txt | 2 +-
450 files changed, 131213 insertions(+), 39435 deletions(-)
diff --git a/drivers/network/tcpip/CMakeLists.txt b/drivers/network/tcpip/CMakeLists.txt
index caa7217dda9..ce3712ddb0e 100644
--- a/drivers/network/tcpip/CMakeLists.txt
+++ b/drivers/network/tcpip/CMakeLists.txt
@@ -4,7 +4,8 @@ set(LWIP_INCLUDE_DIRS
${LWIP_DIR}/src/include
${CMAKE_CURRENT_SOURCE_DIR}/include/lwip
)
-add_subdirectory(lwip)
+include(${LWIP_DIR}/src/Filelists.cmake)
+add_dependencies(lwipcore xdk)
add_subdirectory(ip)
add_definitions(
diff --git a/drivers/network/tcpip/include/lwip/arch/cc.h b/drivers/network/tcpip/include/lwip/arch/cc.h
index 8a6d20066d1..0b0bd175011 100644
--- a/drivers/network/tcpip/include/lwip/arch/cc.h
+++ b/drivers/network/tcpip/include/lwip/arch/cc.h
@@ -15,23 +15,6 @@ free(void *mem);
void *
realloc(void *mem, size_t size);
-/* mem_trim() must trim the buffer without relocating it.
- * Since we can't do that, we just return the buffer passed in unchanged */
-#define mem_trim(_m_, _s_) (_m_)
-
-/* Unsigned int types */
-typedef unsigned char u8_t;
-typedef unsigned short u16_t;
-typedef unsigned long u32_t;
-
-/* Signed int types */
-typedef signed char s8_t;
-typedef signed short s16_t;
-typedef signed long s32_t;
-
-/* Memory pointer */
-typedef ULONG_PTR mem_ptr_t;
-
/* Printf/DPRINT formatters */
#define U16_F "hu"
#define S16_F "hd"
diff --git a/drivers/network/tcpip/include/lwip/arch/sys_arch.h b/drivers/network/tcpip/include/lwip/arch/sys_arch.h
index 03746199062..5844b37b8ec 100644
--- a/drivers/network/tcpip/include/lwip/arch/sys_arch.h
+++ b/drivers/network/tcpip/include/lwip/arch/sys_arch.h
@@ -27,6 +27,9 @@ typedef struct _LWIP_MESSAGE_CONTAINER
#define sys_jiffies() sys_now()
+/* There is no such thing as "from ISR" for us */
+#define sys_mbox_trypost_fromisr sys_mbox_trypost
+
/* NULL definitions */
#define SYS_MBOX_NULL NULL
#define SYS_SEM_NULL NULL
diff --git a/drivers/network/tcpip/include/lwip/lwipopts.h b/drivers/network/tcpip/include/lwip/lwipopts.h
index d6109f4b178..e579c58ac7a 100644
--- a/drivers/network/tcpip/include/lwip/lwipopts.h
+++ b/drivers/network/tcpip/include/lwip/lwipopts.h
@@ -11,6 +11,7 @@
/* Define LWIP_COMPAT_MUTEX if the port has no mutexes and binary semaphores
should be used instead */
#define LWIP_COMPAT_MUTEX 1
+#define LWIP_COMPAT_MUTEX_ALLOWED 1
#define MEM_ALIGNMENT 4
diff --git a/drivers/network/tcpip/include/tcpip.h b/drivers/network/tcpip/include/tcpip.h
index 88c7e063cb9..861d34472c0 100644
--- a/drivers/network/tcpip/include/tcpip.h
+++ b/drivers/network/tcpip/include/tcpip.h
@@ -151,6 +151,7 @@ typedef struct {
#ifndef htons
#define htons(x) WH2N(x)
+#define LWIP_DONT_PROVIDE_BYTEORDER_FUNCTIONS
#endif
/* Global variable */
diff --git a/drivers/network/tcpip/ip/CMakeLists.txt b/drivers/network/tcpip/ip/CMakeLists.txt
index e69ca46f2cd..c070b68494d 100644
--- a/drivers/network/tcpip/ip/CMakeLists.txt
+++ b/drivers/network/tcpip/ip/CMakeLists.txt
@@ -32,6 +32,7 @@ list(APPEND SOURCE
add_library(ip OBJECT ${SOURCE} ${ip_asm})
target_link_libraries(ip lwipcore)
+add_importlibs(lwipcore ntoskrnl)
target_include_directories(ip BEFORE
PRIVATE ${LWIP_INCLUDE_DIRS}
diff --git a/drivers/network/tcpip/ip/lwip_glue/lwip_glue.h b/drivers/network/tcpip/ip/lwip_glue/lwip_glue.h
index ac7ab13e01f..2463340f029 100644
--- a/drivers/network/tcpip/ip/lwip_glue/lwip_glue.h
+++ b/drivers/network/tcpip/ip/lwip_glue/lwip_glue.h
@@ -13,7 +13,6 @@
#endif
typedef struct tcp_pcb* PTCP_PCB;
-typedef struct ip_addr ip4_addr_t;
typedef struct _QUEUE_ENTRY
{
diff --git a/drivers/network/tcpip/ip/lwip_glue/tcp.c b/drivers/network/tcpip/ip/lwip_glue/tcp.c
index 4ac40594d06..96d8853f1c0 100644
--- a/drivers/network/tcpip/ip/lwip_glue/tcp.c
+++ b/drivers/network/tcpip/ip/lwip_glue/tcp.c
@@ -36,7 +36,7 @@ void
LibTCPDumpPcb(PVOID SocketContext)
{
struct tcp_pcb *pcb = (struct tcp_pcb*)SocketContext;
- unsigned int addr = ntohl(pcb->remote_ip.addr);
+ unsigned int addr = lwip_ntohl(pcb->remote_ip.addr);
DbgPrint("\tState: %s\n", tcp_state_str[pcb->state]);
DbgPrint("\tRemote: (%d.%d.%d.%d, %d)\n",
@@ -405,7 +405,7 @@ LibTCPBindCallback(void *arg)
msg->Output.Bind.Error = tcp_bind(pcb,
msg->Input.Bind.IpAddress,
- ntohs(msg->Input.Bind.Port));
+ lwip_ntohs(msg->Input.Bind.Port));
done:
KeSetEvent(&msg->Event, IO_NO_INCREMENT, FALSE);
@@ -609,7 +609,7 @@ LibTCPConnectCallback(void *arg)
tcp_sent((PTCP_PCB)msg->Input.Connect.Connection->SocketContext, InternalSendEventHandler);
Error = tcp_connect((PTCP_PCB)msg->Input.Connect.Connection->SocketContext,
- msg->Input.Connect.IpAddress, ntohs(msg->Input.Connect.Port),
+ msg->Input.Connect.IpAddress, lwip_ntohs(msg->Input.Connect.Port),
InternalConnectEventHandler);
msg->Output.Connect.Error = Error == ERR_OK ? ERR_INPROGRESS : Error;
diff --git a/drivers/network/tcpip/ip/transport/tcp/if.c b/drivers/network/tcpip/ip/transport/tcp/if.c
index 2e57532ca53..3107cda70bd 100644
--- a/drivers/network/tcpip/ip/transport/tcp/if.c
+++ b/drivers/network/tcpip/ip/transport/tcp/if.c
@@ -9,7 +9,7 @@
#include <ipifcons.h>
err_t
-TCPSendDataCallback(struct netif *netif, struct pbuf *p, ip4_addr_t *dest)
+TCPSendDataCallback(struct netif *netif, struct pbuf *p, const ip4_addr_t *dest)
{
NDIS_STATUS NdisStatus;
PNEIGHBOR_CACHE_ENTRY NCE;
diff --git a/drivers/network/tcpip/lwip/.gitattributes b/drivers/network/tcpip/lwip/.gitattributes
new file mode 100644
index 00000000000..dd82723fe67
--- /dev/null
+++ b/drivers/network/tcpip/lwip/.gitattributes
@@ -0,0 +1,10 @@
+# These files are text and should be normalized
+*.txt text
+*.c text
+*.h text
+
+# For git archive
+.gitignore export-ignore
+.gitattributes export-ignore
+.github export-ignore
+.vscode export-ignore
diff --git a/drivers/network/tcpip/lwip/.gitignore b/drivers/network/tcpip/lwip/.gitignore
new file mode 100644
index 00000000000..2fbaca4f5b2
--- /dev/null
+++ b/drivers/network/tcpip/lwip/.gitignore
@@ -0,0 +1,60 @@
+*.o
+*.so
+*.a
+*.exe
+*lwip_unittests.xml
+*.suo
+*.log
+.depend*
+
+/.vscode/ipch
+
+/doc/doxygen/output/html
+
+/test/fuzz/output
+/test/fuzz/lwip_fuzz
+/test/fuzz/lwip_fuzz2
+/test/fuzz/lwip_fuzz3
+/test/fuzz/.depend
+
+/build
+
+/contrib/examples/example_app/lwipcfg.h
+/contrib/examples/example_app/lwipopts_test.h
+
+/contrib/ports/unix/example_app/build
+/contrib/ports/unix/example_app/example_app
+/contrib/ports/unix/example_app/makefsdata
+
+/contrib/ports/unix/check/build
+/contrib/ports/unix/lib/build
+/contrib/ports/unix/check/lwip_unittests
+
+/contrib/ports/win32/example_app/build
+/contrib/ports/win32/lwipcfg_msvc.h
+
+/contrib/ports/win32/msvc/Debug
+/contrib/ports/win32/msvc/Debug unittests
+/contrib/ports/win32/msvc/Release
+/contrib/ports/win32/msvc/Release unittests
+/contrib/ports/win32/msvc/*.user
+/contrib/ports/win32/msvc/*.ncb
+/contrib/ports/win32/msvc/*.cache
+/contrib/ports/win32/msvc/*.suo
+/contrib/ports/win32/msvc/ipch
+/contrib/ports/win32/msvc/*.opensdf
+/contrib/ports/win32/msvc/*.sdf
+/contrib/ports/win32/mingw/*.map
+/contrib/ports/win32/mingw/cov-int
+/contrib/ports/win32/msvc/.vs
+/contrib/apps/LwipMibCompiler/.vs
+/contrib/apps/LwipMibCompiler/CCodeGeneration/bin
+/contrib/apps/LwipMibCompiler/CCodeGeneration/obj
+/contrib/apps/LwipMibCompiler/LwipMibCompiler/bin
+/contrib/apps/LwipMibCompiler/LwipMibCompiler/obj
+/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/bin
+/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/obj
+/contrib/apps/LwipMibCompiler/MibViewer/bin
+/contrib/apps/LwipMibCompiler/MibViewer/obj
+/contrib/apps/LwipMibCompiler/SharpSnmpLib/bin
+/contrib/apps/LwipMibCompiler/SharpSnmpLib/obj
diff --git a/drivers/network/tcpip/lwip/BUILDING b/drivers/network/tcpip/lwip/BUILDING
new file mode 100644
index 00000000000..a2adc626b61
--- /dev/null
+++ b/drivers/network/tcpip/lwip/BUILDING
@@ -0,0 +1,119 @@
+Building lwIP
+=============
+
+lwIP uses a CMake based build system.
+
+The CMake files in this project are designed to
+be included into your own CMake files. They are
+mainly variable definitions containing a list of
+source files and predefined static libraries to
+be linked against application code.
+
+1) lwIP sources:
+ src/Filelists.cmake provides file lists containing
+ the lwIP core library.
+ The file also contains two static libraries, lwipcore
+ and lwipallapps, where you can link your app against.
+ This is the file that is useful to all lwIP users.
+
+2) Example applications:
+ contrib/Filelists.cmake provides several file lists
+ containing the example applications.
+ The file also contains several static libraries
+ for these example apps.
+ This file is only useful for you, if you can use one
+ of the examples in your application, which is normally
+ not the case.
+
+3) OS/platform port:
+ Usually the OS port needs to be provided by the user.
+ If a port to Linux, Windows or MacOS is useful for
+ you, you can use
+ contrib/ports/{win32, unix}/Filelists.cmake
+ that contains file lists and libraries for
+ these operating systems.
+
+VARIABLES
+=========
+In all cases, you need to provide two variables.
+
+"LWIP_DIR" pointing to the lwIP directory
+Example:
+set(LWIP_DIR ${CMAKE_CURRENT_SOURCE_DIR}/externals/lwip)
+
+"LWIP_INCLUDE_DIRS" that contains the include base paths
+- for lwIP itself (${LWIP_DIR}/src/include)
+- for lwIP contrib if you use it (${LWIP_DIR}/contrib)
+- to a directory containing an OS port
+- to a directory containing lwipopts.h
+
+Example:
+set (LWIP_INCLUDE_DIRS
+ "${LWIP_DIR}/src/include"
+ "${LWIP_DIR}/contrib"
+ "${LWIP_DIR}/contrib/ports/unix/port/include"
+ "${LWIP_DIR}/contrib/examples/example_app"
+)
+
+Putting it all together
+=======================
+To get a working application, your CMake system
+needs to provide the variables described above, e.g.
+set (LWIP_DIR <path to lwip sources>)
+set (LWIP_INCLUDE_DIRS
+ "${LWIP_DIR}/src/include"
+ "${LWIP_DIR}/contrib"
+ "<path to my port>/include"
+ "<path to lwipopts.h>"
+)
+
+You may add some defines:
+set (LWIP_DEFINITIONS LWIP_DEBUG=1)
+
+Then include the filelists you need:
+include(${LWIP_DIR}/src/Filelists.cmake)
+include(${LWIP_DIR}/contrib/Filelists.cmake)
+
+Then, declare you executable:
+add_executable(my_app <my source files> <my lwip port files>)
+
+Add lwIP include dirs to your app:
+target_include_directories(my_app PRIVATE ${LWIP_INCLUDE_DIRS})
+
+Link your app against the lwIP libs from the filelists you need:
+target_link_libraries(my_app lwipcontribapps lwipallapps lwipcore)
+
+Working example
+===============
+Working build examples can be found in the
+contrib/ports/{win32, unix}/example_app
+subdirectory.
+To use them, create a build directory and call cmake with
+the lwIP root dir:
+
+- mkdir build
+- cd build
+- cmake ..
+- cmake --build .
+
+The CMakeLists.txt will autoselect the correct port
+for your system (supported: Linux, Windows, Darwin).
+
+To configure the example app to your needs, you need to copy the file
+ contrib/examples/example_app/lwipcfg.h.example
+to
+ contrib/examples/example_app/lwipcfg.h
+and edit to your needs.
+
+Makefile based build system
+===========================
+lwIP also maintains file lists for Makefile-based
+build systems. Look for Filelists.mk files
+in the source tree. We try to maintain them,
+but lwIP's mainly focused build system is CMake.
+
+MS Visual Studio
+================
+lwIP also provides basic support for MSVS in the win32 port
+folder under 'msvc'. We try to maintain these files,
+but lwIP's mainly focused build system is CMake.
diff --git a/drivers/network/tcpip/lwip/CHANGELOG b/drivers/network/tcpip/lwip/CHANGELOG
index c502b0039cd..5d5f81ad31c 100644
--- a/drivers/network/tcpip/lwip/CHANGELOG
+++ b/drivers/network/tcpip/lwip/CHANGELOG
@@ -1,15 +1,1311 @@
HISTORY
+ * These are only the most important changes. For a full list, use git log:
+ http://git.savannah.nongnu.org/cgit/lwip.git
-(CVS HEAD)
+(git master)
* [Enter new changes just after this line - do not remove this line]
- ++ New features:
+(STABLE-2.2.0):
+
+ 2018-10-02: Dirk Ziegelmeier
+ * Integrate contrib repository into main lwIP repository
+
+ ++ New features:
+
+ 2022-04-05: David Cermak
+ * contrib/addons: Add example of using DHCP extra options hooks
+
+ 2023-05-11: David Cermak
+ * dhcp: Add macro for appending extra client's request options
+
+ 2023-05-11: xueyunfei
+ * dhcp: Enable custom config for timeouts, thresholds, backoff time
+
+ 2021-04-26
+ * test/unit: added more unit tests
+
+ 2020-03-27: Simon Goldschmidt
+ * test/fuzz: improve fuzz test
+
+ 2019-12-11: Simon Goldschmidt
+ * ip6addr_aton: support scoped address strings (via '%')
+
+ 2019-08-28: Joan Lledó
+ * Contrib: Add kFreeBSD to the Unix port
+
+ 2019-07-14: Joan Lledó
+ * Unix port: improve support for the Hurd
+
+ ++ Bugfixes:
+
+ 2019-12-11: David Girault
+ * altcp_tls: support for saving/restoring session information
+
+ 2018-11-16: Craig McQUeen
+ * dns: allow a DNS look-up with a trailing dot in the name
+
+ 2018-10-19: Timmy Brolin
+ * Add outgoing VLAN PCP support for Ethernet level QoS
+
+ 2018-10-08: Ben Wijen
+ * apps/tftp: added TFTP client
+
+ 2018-10-04: Jasper Verschueren
+ * Implement IPv4 ACD (Address Conflict Detection)
+
+ 2023-05-10
+ * altcp_tls_mbedtls: note which version of mbedtls we are compatible to
+ * altcp_tls_mbedtls: multiple compatibility fixes
+
+ 2023-04-26: Jan Breuer, Harrold Spier, Ognjen Bjelica, Dirk Ziegelmeier, Simon Goldschmidt
+ * apps/snmp: multiple fixes and improvements to snmp
+
+ 2022-01-12: Simon Goldschmidt
+ * httpd: clean up custom file handling
+
+ 2021-11-25: quanjia
+ * ping: fix sockaddr len in ping_send() for PING_USE_SOCKETS==1
+
+ 2021-11-12: Bas Prins
+ * http_client: reset timeout when receiving data
+
+ 2020-07-07: Erik Ekman
+ * Rename IP and Ethernet equality checkers from _cmp to _eq
+
+ 2020-03-05: Simon Goldschmidt
+ * tcp: tighten up checks for received SYN
+
+ 2020-01-30: Simon Goldschmidt, David Girault, David J. Fiddes, Tom Ferrin
+ * apps/sntp: multiple fixes and improvements for sntp
+
+ 2020-01-30: Simon Goldschmidt
+ * ip_forward: fix IPv4 forwarding with multiple netifs/offloading
+
+ 2019-06-11: David Girault, Giuseppe Modugno
+ * apps/mqtt: multiple fixes for mqtt
+
+ 2019-05-19: Joan Lledó
+ * New function tcpip_callback_wait()
+ Call a function inside the tcpip thread and block the calling thread until
+ the callback finishes
+
+ 2018-08-15: Jasper Verschueren, David Girault, Our Air Quality
+ * apps/mdns: greatly improved the mdns client
+
+(STABLE-2.1.2):
+
+ ++ Bugfixes:
+
+ 2018-11-21: Jens Nielsen
+ * netbiosns.c: fix expecting too large packet (bug #55069)
+
+ 2018-11-19: Dirk Ziegelmeier
+ * smtp.c: fix compiling with strict C compatibility because of strnlen (bug #55034)
+
+ 2018-11-12: Simon Goldschmidt
+ * tcp.c: fix overflow check in tcp_recved triggering invalid assertion (bug #55015)
+
+ 2018-11-12: Simon Goldschmidt
+ * tcp.c: fix a bug in sending RST segments (sent from port 0)
+
+(STABLE-2.1.1):
+
+ ++ Bugfixes:
+
+ 2018-11-01: Joan Lledó
+ * sockets.c: fix bad assertion in lwip_poll_dec_sockets_used() (bug #54933)
+
+ 2018-11-01: Dirk Ziegelmeier
+ * ip4.c: don't send 127.* to default netif (bug #54670)
+
+ 2018-10-23: David Girault
+ * altcp_tls_mbedtls.c: fix use-after free (bug #54774)
+
+ 2018-10-23: Ognjen Bjelica, Dirk Ziegelmeier
+ * snmp_scalar.c: Avoid NULL pointer dereference (bug #54886)
+
+ 2018-10-23: Simon Goldschmidt
+ * Fix missing standard includes in multiple files
+
+ 2018-10-17: Ivan Warren
+ * def.h: fix casting htonX and ntohX to u16_t (bug #54850)
+
+ 2018-10-12: Simon Goldschmidt
+ * Revert "tcp_abandon: no need to buffer pcb->local_port" (fix that source port was 0 for RST
+ called when aborting a connection)
+
+ 2018-10-11: Jonas Rabenstein
+ * tcp.c: tcp_recved: check for overflow and warn about too big values (patch #9699)
+
+ 2018-10-06: Joan Lledó
+ * sockets.c: alloc_socket(): Check for LWIP_SOCKET_POLL when setting select-
+ related variables (patch #9696)
+
+ 2018-10-04: Spencer
+ * tcp.c: Update prev pointer when skipping entries in tcp_slowtmr (patch #9694)
+
+ 2018-09-27: Martine Lenders
+ * lowpan6.c: Fix IEEE 802.15.4 address setting (bug #54749)
+
+(STABLE-2.1.0):
+
+ ++ New features:
+
+ 2018-06-17: Simon Goldschmidt
+ * lwiperf: implemented iPerf client mode
+
+ 2018-04-23: Dirk Ziegelmeier
+ * added cmake build files
+
+ 2018-03-04: Ray Abram
+ * netbios responder: respond to '*' queries
+
+ 2018-02-23: Benjamin Aigner
+ * 6lowpan: add 6lowpan-over-BLE netif (based on existing 6lowpan netif)
+
+ 2018-02-22: Simon Goldschmidt
+ * ipv6: add support for stateless DHCPv6 (to get DNS servers in SLAAC nets)
+
+ 2018-02-16: Simon Goldschmidt
+ * add raw API http(s) client (with proxy support)
+
+ 2018-02-01: Simon Goldschmidt
+ * tcp: add hooks to implement additional socket options
+
+ 2018-02-01: Simon Goldschmidt
+ * tcp: add hooks to implement tcp md5 signatures or similar (see contrib/addons for an example)
+
+ 2018-01-05: Simon Goldschmidt
+ * Added sys_mbox_trypost_fromisr() and tcpip_callbackmsg_trycallback_fromisr()
+ These can be used to post preallocated messages from an ISR to the tcpip thread
+ (e.g. when using FreeRTOS)
+
+ 2018-01-02: Dirk Ziegelmeier
+ * task #14780: Add debug helper asserts to ensure threading/locking requirements are met
+
+ 2017-11-21: Simon Goldschmidt
+ * task #14600: tcp_alloc(): kill TF_CLOSEPEND connections before other ESTABLISHED
+
+ 2017-11-21: Simon Goldschmidt
+ * makefsdata: added option "-ssi:<filename>" to control SSI tag checking/insertion
+ through a list of filenames, not by checking the file extension at runtime
+
+ 2017-11-20: Joel Cunningham
+ * netconn: add LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE to use external DNS resolver (patch #9427)
+
+ 2017-11-14: Joel Cunningham
+ * netifapi: Add thread safe ARP cache APIs (task #14724)
+
+ 2017-11-06: Axel Lin
+ * TCP: kill existing connections with a LOWER priority than the one currently being opened.
+ Previous implementations also kill existing connections of the SAME priority.
+
+ 2017-09-21: Kalle Olavi Niemitalo
+ * sockets: add poll() implementation (patch #9450)
+
+ 2017-09-10: Joel Cunningham
+ * sockets: add readv() implementation (task #14610)
+
+ 2017-08-04: Simon Goldschmidt
+ * Clean up DHCP a bit: no need keep msg_out and msg_in as members in struct
+ dhcp - they are used in a call stack only (p_out and options_out_len as well)
+
+ 2017-08-04: Simon Goldschmidt
+ * pbuf: split pbuf_header(s16_t) into pbuf_add_header(size_t) and
+ pbuf_remove_header(size_t)
+
+ 2017-07-20: Douglas
+ * sys: deprecate sys_arch_sem_wait and sys_arch_mbox_fetch returning the
+ time waited rather they are now defined to return != SYS_ARCH_TIMEOUT
+ on success.
+
+ 2017-07-03: Jakub Schmidtke
+ * tcp: added support for sending TCP SACKs
+
+ 2017-06-20: Joel Cunningham
+ * netconn/netdb: added core locking support to netconn_gethostbyname (task #14523)
+
+ 2017-04-25: Simon Goldschmidt
+ * dhcp: added two hooks for adding and parsing user defined DHCP options
+
+ 2017-04-25: Joel Cunningham
+ * sockets: added recvmsg for UDP (together with CMSG and IP_PKTINFO) (task #14247)
+
+ 2017-04-20: Joel Cunningham
+ * tcp: added Appropriate Byte Counting support (task #14128)
+
+ 2017-04-11: Simon Goldschmidt
+ * netconn/sockets: remove fatal error handling, fix asynchronous error handling,
+ ensure data before RST can be received
+
+ 2017-03-30: Simon Goldschmidt
+ * added "application layered TCP" connection API (altcp) for seamless integration
+ of TLS or proxy connections
+
+ 2017-03-09: Simon Goldschmidt
+ * sockets: add recvmsg for TCP
+
+ 2017-03-02: Joel Cunningham
+ * netconn/sockets: vectorize netconn_write for TCP, treating a vectored I/O write
+ atomically in regards to TCP segmentation (patch #8882)
+
+ 2017-03-02: Simon Goldschmidt
+ * netconn: added nonblocking accept/recv to netconn API (task #14396)
+
+ 2017-02-28: Simon Goldschmidt
+ * Added LWIP_SINGLE_NETIF for small targets with only one netif
+
+ 2017-02-10: David van Moolenbroek
+ * Implement UDP and RAW multicast support for IPv6 (core API, not netconn/sockets)
+
+ 2017-02-04: David van Moolenbroek
+ * IPv6 scopes support
+
+ 2017-01-20: Joel Cunningham
+ * sockets: add interface name/index APIs (task #14314)
+
+ 2017-01-08: David van Moolenbroek
+ * Extensions to RAW API (patch #9208)
+ - Connected RAW PCBs
+ - Add raw_sendto_if_src()
+ - Support IP_HDRINCL socket option
+
+ ++ Bugfixes:
+
+ 2018-06-19: Simon Goldschmidt
+ * tcp: fix RTO timer not working if link is down
+
+ 2018-06-15: Sylvain Rochet
+ * ppp: multiple smaller bugfixes
+
+ 2018-05-17: Simon Goldschmidt
+ * etharp: arp table can now be bigger than 127 entries
+
+ 2018-04-25: Jens Nielsen
+ * tftp server: correctly handle retransmissions
+
+ 2018-04-18: Simon Goldschmidt
+ sockets: fix race conditions when closing full-duplex sockets
+
+ 2018-03-09: Simon Goldschmidt
+ * 6lowpan: fix to work against contiki; added ZigBee encapsulation netif for tests
+
+ 2018-02-04: Simon Goldschmidt
+ * sockets: fix inconsistencies on close (inconsistent error codes, double FIN)
+
+ 2018-01-05: Dirk Ziegelmeier
+ * Fix bug #52748: the bug in timeouts.c by reimplementing timer logic to use
+ absolute instead of relative timeout values
+
+ 2017-12-31: Dirk Ziegelmeier
+ * Fix bug #52704: DHCP and bad OFFER: Stop timeout only if offer is accepted
+
+ 2017-11-08: Joel Cunningham
+ * netif: ensure link and admin states are up in issue reports (bug #52353)
+
+ 2017-09-12: David Lockyer
+ * select: allocate select_cb from memp for LWIP_MPU_COMPATIBLE = 1 (bug #51990)
+
+ 2017-09-11: Simon Goldschmidt
+ * tcp_in.c: fix bug #51937 (leaking tcp_pcbs on passive close with unacked data)
+
+ 2017-08-11: Joel Cunningham
+ * lwip_itoa: fix converting the number 0 (previously converted to '\0') (bug #51729)
+
+ 2017-08-08: Dirk Ziegelmeier
+ * ip4_route_src: parameter order is reversed: ip4_route_src(dest, src) -> ip4_route_src(src, dest)
+ to make parameter order consistent with other ip*_route*() functions
+ Same also applies to LWIP_HOOK_IP4_ROUTE_SRC() parameter order.
+
+ 2017-08-04: Joel Cunningham
+ * tcp: re-work persist timer to fully close window (details in bug #50837)
+
+ 2017-07-26: Simon Goldschmidt
+ * snmp_msg.c: fix bug #51578 (SNMP failed to decode some values on non 32bit platforms)
+
+ 2017-07-20: Simon Goldschmidt
+ * compatibility headers: moved from 'src/include/posix' to 'src/include/compat/posix',
+ 'src/include/compat/stdc' etc.
+
+ 2017-05-09: Joel Cunningham
+ * tcp: add zero-window probe timeout (bug #50837)
+
+ 2017-04-11: Simon Goldschmidt
+ * sockets.c: task #14420 (Remove sys_sem_signal from inside SYS_ARCH_PROTECT
+ crit section) done for LWIP_TCPIP_CORE_LOCKING==1
+
+ 2017-02-24: Simon Goldschmidt
+ * sockets.c: fixed close race conditions in lwip_select (for LWIP_NETCONN_FULLDUPLEX)
+
+ 2017-02-24: Simon Goldschmidt
+ * sockets.c: fixed that select ignored invalid/not open sockets in the fd_sets (bug #50392)
+
+ 2017-01-11: David van Moolenbroek
+ * Lots of IPv6 related fixes and improvements
+
+(STABLE-2.0.3)
+
+ ++ Bugfixes:
+
+ 2017-09-11: Simon Goldschmidt
+ * tcp_in.c: fix bug #51937 (leaking tcp_pcbs on passive close with unacked data)
+
+ 2017-08-02: Abroz Bizjak/Simon Goldschmidt
+ * multiple fixes in IPv4 reassembly (leading to corrupted datagrams received)
+
+ 2017-03-30: Simon Goldschmidt
+ * dhcp.c: return ERR_VAL instead of asserting on offset-out-of-pbuf
+
+ 2017-03-23: Dirk Ziegelmeier
+ * dhcp.h: fix bug #50618 (dhcp_remove_struct() macro does not work)
+
+(STABLE-2.0.2)
+
+ ++ New features:
+
+ 2017-02-10: Dirk Ziegelmeier
+ * Implement task #14367: Hooks need a better place to be defined:
+ We now have a #define for a header file name that is #included in every .c
+ file that provides hooks.
+
+ 2017-02-10: Simon Goldschmidt
+ * tcp_close does not fail on memory error (instead, FIN is sent from tcp_tmr)
+
+ ++ Bugfixes:
+
+ 2017-03-08
+ * tcp: do not keep sending SYNs when getting ACKs
+
+ 2017-03-08: Joel Cunningham
+ * tcp: Initialize ssthresh to TCP_SND_BUF (bug #50476)
+
+ 2017-03-01: Simon Goldschmidt
+ * httpd: LWIP_HTTPD_POST_MANUAL_WND: fixed double-free when httpd_post_data_recved
+ is called nested from httpd_post_receive_data() (bug #50424)
+
+ 2017-02-28: David van Moolenbroek/Simon Goldschmidt
+ * tcp: fixed bug #50418: LWIP_EVENT_API: fix invalid calbacks for SYN_RCVD pcb
+
+ 2017-02-17: Simon Goldschmidt
+ * dns: Improved DNS_LOCAL_HOSTLIST interface (bug #50325)
+
+ 2017-02-16: Simon Goldschmidt
+ * LWIP_NETCONN_FULLDUPLEX: fixed shutdown during write (bug #50274)
+
+ 2017-02-13: Simon Goldschmidt/Dirk Ziegelmeier
+ * For tiny targtes, LWIP_RAND is optional (fix compile time checks)
+
+ 2017-02-10: Simon Goldschmidt
+ * tcp: Fixed bug #47485 (tcp_close() should not fail on memory error) by retrying
+ to send FIN from tcp_fasttmr
+
+ 2017-02-09: Simon Goldschmidt
+ * sockets: Fixed bug #44032 (LWIP_NETCONN_FULLDUPLEX: select might work on
+ invalid/reused socket) by not allowing to reallocate a socket that has
+ "select_waiting != 0"
+
+ 2017-02-09: Simon Goldschmidt
+ * httpd: Fixed bug #50059 (httpd LWIP_HTTPD_SUPPORT_11_KEEPALIVE vs.
+ LWIP_HTTPD_KILL_OLD_ON_CONNECTIONS_EXCEEDED)
+
+ 2017-02-08: Dirk Ziegelmeier
+ * Rename "IPv6 mapped IPv4 addresses" to their correct name from RFC4191:
+ "IPv4-mapped IPv6 address"
+
+ 2017-02-08: Luc Revardel
+ * mld6.c: Fix bug #50220 (mld6_leavegroup does not send ICMP6_TYPE_MLD, even
+ if last reporter)
+
+ 2017-02-08: David van Moolenbroek
+ * ip6.c: Patch #9250: fix source substitution in ip6_output_if()
+
+ 2017-02-08: Simon Goldschmidt
+ * tcp_out.c: Fixed bug #50090 (last_unsent->oversize_left can become wrong value
+ in tcp_write error path)
+
+ 2017-02-02: Dirk Ziegelmeier
+ * Fix bug #50206: UDP Netconn bind to IP6_ADDR_ANY fails
+
+ 2017-01-18: Dirk Ziegelmeier
+ * Fix zero-copy RX, see bug bug #50064. PBUF_REFs were not supported as ARP requests.
+
+ 2017-01-15: Axel Lin, Dirk Ziegelmeier
+ * minor bug fixes in mqtt
+
+ 2017-01-11: Knut Andre Tidemann
+ * sockets/netconn: fix broken default ICMPv6 handling of checksums
+
+(STABLE-2.0.1)
+
+ ++ 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-20: Erik Andersen
+ * Add MQTT client
+
+ 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
@@ -59,12 +1355,12 @@ HISTORY
* 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)
+ 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:
+ ++ Bugfixes:
2012-09-26: Simon Goldschmidt
* api_msg.c: fixed bug #37405 'err_tcp()' uses already freed 'netconn' object
@@ -91,10 +1387,10 @@ HISTORY
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
@@ -111,7 +1407,7 @@ HISTORY
* 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)
+ 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
@@ -549,7 +1845,7 @@ HISTORY
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
@@ -602,7 +1898,7 @@ HISTORY
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.
@@ -647,21 +1943,21 @@ HISTORY
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
+ * 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
@@ -765,7 +2061,7 @@ HISTORY
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.
+ 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
@@ -836,11 +2132,11 @@ HISTORY
* 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)
+ 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)
+ 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.
@@ -1077,7 +2373,7 @@ HISTORY
LWIP_AUTOIP_CREATE_SEED_ADDR() returned address in host byte order instead
of network byte order
- 2009-10-11 Simon Goldschmidt (J�rg Kesten)
+ 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
@@ -1225,7 +2521,7 @@ HISTORY
sent to mbox
2009-06-25 Kieran Mansley
- * api_msg.c api.h: BUG26722: initialise netconn write variables
+ * api_msg.c api.h: BUG26722: initialise netconn write variables
in netconn_alloc
2009-06-25 Kieran Mansley
@@ -1233,7 +2529,7 @@ HISTORY
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
+ simultaneous close behaviour, and make snd_nxt have the same meaning
as in the RFCs.
2009-05-12 Simon Goldschmidt
@@ -1255,7 +2551,7 @@ HISTORY
2009-05-04 Simon Goldschmidt
* init.c: snmp was not initialized in lwip_init()
- 2009-05-04 Fr�d�ric Bernon
+ 2009-05-04 Frédéric Bernon
* dhcp.c, netbios.c: Changes if IP_SOF_BROADCAST is enabled.
2009-05-03 Simon Goldschmidt
@@ -1275,7 +2571,7 @@ HISTORY
2009-05-01 Simon Goldschmidt
* ppp.c: bug #24228: Memory corruption with PPP and DHCP
- 2009-04-29 Fr�d�ric Bernon
+ 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
@@ -1297,7 +2593,7 @@ HISTORY
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
+ 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)
@@ -1369,7 +2665,7 @@ HISTORY
* 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
+ * 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)
@@ -1405,9 +2701,9 @@ HISTORY
out of pool pbufs.
2008-12-19 Simon Goldschmidt
- * many files: patch #6699: fixed some warnings on platform where sizeof(int) == 2
+ * many files: patch #6699: fixed some warnings on platform where sizeof(int) == 2
- 2008-12-10 Tamas Somogyi, Fr�d�ric Bernon
+ 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.
@@ -1441,7 +2737,7 @@ HISTORY
* 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
+ 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).
@@ -1489,52 +2785,52 @@ HISTORY
* 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
+ 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
+ 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
+ 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
+
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
@@ -1543,31 +2839,31 @@ HISTORY
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
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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)"
@@ -1599,7 +2895,7 @@ HISTORY
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
+ 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
@@ -1616,7 +2912,7 @@ HISTORY
dns resolver function for netconn api (netconn_gethostbyname) and socket api
(gethostbyname/gethostbyname_r).
- 2007-11-15 Jim Pettinato, Fr�d�ric Bernon
+ 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
@@ -1635,7 +2931,7 @@ HISTORY
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
+ 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
@@ -1643,15 +2939,15 @@ HISTORY
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
+ 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
+ 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.
@@ -1670,23 +2966,23 @@ HISTORY
* 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
+ 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
+ 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
+ 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
+ 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
@@ -1695,10 +2991,10 @@ HISTORY
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
+ 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
+ 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().
@@ -1706,20 +3002,20 @@ HISTORY
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
+ 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
+ 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
+ 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
@@ -1728,11 +3024,11 @@ HISTORY
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
+ 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
+ 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
@@ -1740,7 +3036,7 @@ HISTORY
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
+ 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)
@@ -1748,22 +3044,22 @@ HISTORY
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
+ 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
+ 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
+ 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
+ 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".
@@ -1776,23 +3072,23 @@ HISTORY
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).
+ pointer after the connection has been closed (and conn has been freed).
- 2007-08-25 Fr�d�ric Bernon (Artem Migaev's Patch)
+ 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
+ 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
+ 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
+ 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
+ * 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.
@@ -1838,13 +3134,13 @@ HISTORY
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)
+ 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
+ 2007-06-30 Frédéric Bernon
* sockets.h, sockets.c: Implement MSG_PEEK flag for recv/recvfrom functions.
2007-06-21 Simon Goldschmidt
@@ -1881,7 +3177,7 @@ HISTORY
* 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
+ 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.
@@ -1894,7 +3190,7 @@ HISTORY
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)
+ 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
@@ -1915,11 +3211,11 @@ HISTORY
(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
+ 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
+ 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...
@@ -1936,7 +3232,7 @@ HISTORY
PBUF_POOL pbufs instead of the old pool implementation in pbuf.c to reduce
code size.
- 2007-05-11 Fr�d�ric Bernon
+ 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
@@ -1964,7 +3260,7 @@ HISTORY
* 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
+ 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
@@ -1978,12 +3274,12 @@ HISTORY
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
+ 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
+ 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
@@ -1991,54 +3287,54 @@ HISTORY
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
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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(a)hmgsl.com).
+ * netif.c, netif.h: Apply patch#4197 with some changes (originator: rireland(a)hmgsl.com).
Provides callback on netif up/down state change.
- 2007-03-11 Fr�d�ric Bernon, Mace Gael, Steve Reynolds
+ 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
+ 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
+ 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
+ 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
+ 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.
@@ -2046,8 +3342,8 @@ HISTORY
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:
+ 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)
@@ -2066,19 +3362,19 @@ HISTORY
++ Bug fixes:
- 2008-03-17 Fr�d�ric Bernon, Ed Kerekes
+ 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
+ 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
+ 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
@@ -2089,11 +3385,11 @@ HISTORY
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)
+ 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)
+ 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
@@ -2167,7 +3463,7 @@ HISTORY
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
+ 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.
@@ -2199,14 +3495,14 @@ HISTORY
2007-10-08 Simon Goldschmidt
* mem.c: lfree was not updated in mem_realloc!
- 2007-10-07 Fr�d�ric Bernon
+ 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
+ lwip_getsockname use now a common lwip_getaddrname function since
netconn_peer & netconn_addr have the same parameters).
2007-09-20 Simon Goldschmidt
@@ -2219,23 +3515,23 @@ HISTORY
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
+ 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,
+ 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
+ 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
+ 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
+ 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).
@@ -2244,19 +3540,19 @@ HISTORY
* 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
+ 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
+ 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
+ 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")
+ 2007-07-26 Frédéric Bernon (and "thedoctor")
* igmp.c: Fix bug #20595 to accept IGMPv3 "Query" messages.
2007-07-25 Simon Goldschmidt
@@ -2280,11 +3576,11 @@ HISTORY
* 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
+ 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
+ 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.
@@ -2321,16 +3617,16 @@ HISTORY
* 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
+ 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
+ 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...)
+ 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.
@@ -2352,11 +3648,11 @@ HISTORY
-> netconn_new_..() does not allocate a new connection for unsupported
protocols.
- 2007-06-13 Fr�d�ric Bernon, Simon Goldschmidt
+ 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
+ 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.
@@ -2385,13 +3681,13 @@ HISTORY
2007-06-01 Simon Goldschmidt
* sockets.c: Checked in patch #5914: Moved sockopt processing into tcpip_thread.
- 2007-05-23 Fr�d�ric Bernon
+ 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
+ 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).
@@ -2400,13 +3696,13 @@ HISTORY
* 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
+ 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
+ 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).
@@ -2430,9 +3726,9 @@ HISTORY
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
+ 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
+ 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).
@@ -2494,24 +3790,24 @@ HISTORY
"Constant is long" warnings with 16bit compilers. Contributed by
avatar(a)mmlab.cse.yzu.edu.tw
- 2007-04-05 Fr�d�ric Bernon, Jonathan Larmour
+ 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
+ 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
+ 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
+ 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
+ 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.
@@ -2525,19 +3821,19 @@ HISTORY
* 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)
+ 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
+ 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
+ 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
+ 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).
@@ -2546,17 +3842,17 @@ HISTORY
* sockets.c: fixed bug #5067 (essentialy a signed/unsigned warning fixed
by casting to unsigned).
- 2007-03-21 Fr�d�ric Bernon
+ 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
+ 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
+ 2007-03-21 Frédéric Bernon
* api_msg.c, igmp.c, igmp.h: Fix C++ style comments
2007-03-21 Kieran Mansley
@@ -2573,24 +3869,24 @@ HISTORY
* 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
+ 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
+ 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
+ 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
+ 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
+ 2007-03-19 Frédéric Bernon
* Remove unimplemented "memp_realloc" function from memp.h.
2007-03-11 Simon Goldschmidt
@@ -2602,7 +3898,7 @@ HISTORY
(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)
+ 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
@@ -2616,7 +3912,7 @@ HISTORY
* 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
+ 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().
@@ -2624,7 +3920,7 @@ HISTORY
* 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
+ 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
@@ -2636,15 +3932,15 @@ HISTORY
* err.h, err.c: fixed compiler warning "initialization dircards qualifiers
from pointer target type"
- 2007-03-05 Fr�d�ric Bernon
+ 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
+ 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
+ 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).
@@ -2658,7 +3954,7 @@ HISTORY
* 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
+ 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().
@@ -2667,17 +3963,17 @@ HISTORY
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
+ 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
+ 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
+ 2007-02-28 Kieran Mansley
* sockets.c: Fix BUG#19161 - ensure milliseconds timeout is non-zero
- when supplied timeout is also non-zero
+ when supplied timeout is also non-zero
(STABLE-1.2.0)
@@ -2761,7 +4057,7 @@ HISTORY
in accept() by Kevin Lawson.
2006-05-26 Christiaan Simons
- * api_lib.c: Removed conn->sem creation and destruction
+ * api_lib.c: Removed conn->sem creation and destruction
from netconn_write() and added sys_sem_new to netconn_new_*.
(STABLE-1_1_1)
@@ -2831,7 +4127,7 @@ HISTORY
* 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_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.)
diff --git a/drivers/network/tcpip/lwip/CMakeLists.txt b/drivers/network/tcpip/lwip/CMakeLists.txt
index 1a91ea1e6c7..55fc44a1349 100644
--- a/drivers/network/tcpip/lwip/CMakeLists.txt
+++ b/drivers/network/tcpip/lwip/CMakeLists.txt
@@ -1,56 +1,35 @@
+cmake_minimum_required(VERSION 3.10)
-list(APPEND SOURCE
- src/api/api_lib.c
- src/api/api_msg.c
- src/api/err.c
- src/api/netbuf.c
- src/api/netdb.c
- src/api/netifapi.c
- src/api/sockets.c
- src/api/tcpip.c
- src/core/def.c
- src/core/dhcp.c
- src/core/dns.c
- src/core/init.c
- src/core/mem.c
- src/core/memp.c
- src/core/netif.c
- src/core/pbuf.c
- src/core/raw.c
- src/core/stats.c
- src/core/sys.c
- src/core/tcp_in.c
- src/core/tcp_out.c
- src/core/tcp.c
- src/core/timers.c
- src/core/udp.c
- src/core/ipv4/autoip.c
- src/core/ipv4/icmp.c
- src/core/ipv4/igmp.c
- src/core/ipv4/inet_chksum.c
- src/core/ipv4/inet.c
- src/core/ipv4/ip.c
- src/core/ipv4/ip_addr.c
- src/core/ipv4/ip_frag.c
- #src/core/ipv6/icmp6.c
- #src/core/ipv6/inet6.c
- #src/core/ipv6/ip6_addr.c
- #src/core/ipv6/ip6.c
- src/core/snmp/asn1_dec.c
- src/core/snmp/asn1_enc.c
- src/core/snmp/mib_structs.c
- src/core/snmp/mib2.c
- src/core/snmp/msg_in.c
- src/core/snmp/msg_out.c)
+set (CMAKE_CONFIGURATION_TYPES "Debug;Release")
-add_library(lwipcore ${SOURCE})
+project(lwIP)
-target_include_directories(lwipcore
- PRIVATE ${LWIP_INCLUDE_DIRS}
- PUBLIC src/include/ipv4)
+# Example lwIP application
+set(LWIP_DIR ${CMAKE_CURRENT_SOURCE_DIR})
-add_dependencies(lwipcore bugcodes xdk)
+set (LWIP_DEFINITIONS LWIP_DEBUG=1)
-if(NOT MSVC)
- target_compile_options(lwipcore PRIVATE -fno-builtin-malloc -fno-builtin-free)
+if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
+ add_subdirectory(${LWIP_DIR}/contrib/ports/win32/example_app)
+elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
+ add_subdirectory(${LWIP_DIR}/contrib/ports/unix/example_app)
+else()
+ message(WARNING "Host ${CMAKE_SYSTEM_NAME} is not supported to build example_app")
+endif()
+
+# Source package generation
+set(CPACK_SOURCE_GENERATOR "ZIP")
+set(CPACK_SOURCE_PACKAGE_DESCRIPTION_SUMMARY "lwIP lightweight IP stack")
+set(CPACK_PACKAGE_VERSION_MAJOR "${LWIP_VERSION_MAJOR}")
+set(CPACK_PACKAGE_VERSION_MINOR "${LWIP_VERSION_MINOR}")
+set(CPACK_PACKAGE_VERSION_PATCH "${LWIP_VERSION_REVISION}")
+set(CPACK_SOURCE_IGNORE_FILES "/build/;${CPACK_SOURCE_IGNORE_FILES};.git")
+set(CPACK_SOURCE_PACKAGE_FILE_NAME "lwip-${LWIP_VERSION_MAJOR}.${LWIP_VERSION_MINOR}.${LWIP_VERSION_REVISION}")
+include(CPack)
+
+# Generate docs before creating source package
+include(src/Filelists.cmake)
+add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source)
+if (TARGET lwipdocs)
+ add_dependencies(dist lwipdocs)
endif()
diff --git a/drivers/network/tcpip/lwip/COPYING b/drivers/network/tcpip/lwip/COPYING
index e23898b5e8f..90465f592ce 100644
--- a/drivers/network/tcpip/lwip/COPYING
+++ b/drivers/network/tcpip/lwip/COPYING
@@ -1,33 +1,25 @@
-/*
- * Copyright (c) 2001, 2002 Swedish Institute of Computer Science.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- *
- * Author: Adam Dunkels <adam(a)sics.se>
- *
- */
+Copyright (c) 2001, 2002 Swedish Institute of Computer Science.
+All rights reserved.
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+OF SUCH DAMAGE.
diff --git a/drivers/network/tcpip/lwip/FEATURES b/drivers/network/tcpip/lwip/FEATURES
new file mode 100644
index 00000000000..87802d13f7d
--- /dev/null
+++ b/drivers/network/tcpip/lwip/FEATURES
@@ -0,0 +1,11 @@
+lwIP is a small independent implementation of the TCP/IP protocol suite targeted at embedded systems.
+
+The focus of the lwIP TCP/IP implementation is to reduce resource usage while still having a full scale TCP. This makes lwIP suitable for use in embedded systems with tens of kilobytes of free RAM and room for around 40 kilobytes of code ROM.
+
+Main features include:
+- Protocols: IP, IPv6, ICMP, ND, MLD, UDP, TCP, IGMP, ARP, PPPoS, PPPoE, 6LowPAN (via IEEE 802.15.4, BLE or ZEP; since v2.1.0)
+- DHCP client, stateless DHCPv6 (since v2.1.0), DNS client (incl. mDNS hostname resolver), AutoIP/APIPA (Zeroconf), ACD (Address Conflict Detection), SNMP agent (v1, v2c, v3 (since v2.1.0), private MIB support & MIB compiler)
+- APIs: specialized APIs for enhanced performance & zero copy, optional Berkeley-alike socket API
+- Extended features: IP forwarding over multiple network interfaces
+- Extended TCP features: congestion control, RTT estimation and fast recovery/fast retransmit, sending SACKs (since v2.1.0), "altcp": nearly transparent TLS for any tcp pcb (since v2.1.0)
+- Addon applications: HTTP server (HTTPS via altcp), HTTP(S) client (since v2.1.0), SNTP client, SMTP client (SMTPS via altcp), ping, NetBIOS nameserver, mDNS responder, MQTT client (TLS support since v2.1.0), TFTP server, iPerf2 counterpart
diff --git a/drivers/network/tcpip/lwip/FILES b/drivers/network/tcpip/lwip/FILES
index 66253196f92..2a7086c1022 100644
--- a/drivers/network/tcpip/lwip/FILES
+++ b/drivers/network/tcpip/lwip/FILES
@@ -1,4 +1,6 @@
+contrib/ - lwIP examples, ports, and small apps (formerly http://git.savannah.gnu.org/cgit/lwip/lwip-contrib.git/)
src/ - The source code for the lwIP TCP/IP stack.
doc/ - The documentation for lwIP.
+test/ - Some code to test whether the sources do what they should.
See also the FILES file in each subdirectory.
diff --git a/drivers/network/tcpip/lwip/README b/drivers/network/tcpip/lwip/README
index a62cc4f38c8..f831051b13a 100644
--- a/drivers/network/tcpip/lwip/README
+++ b/drivers/network/tcpip/lwip/README
@@ -1,37 +1,57 @@
INTRODUCTION
-lwIP is a small independent implementation of the TCP/IP protocol
-suite that has been developed by Adam Dunkels at the Computer and
-Networks Architectures (CNA) lab at the Swedish Institute of Computer
-Science (SICS).
+lwIP is a small independent implementation of the TCP/IP protocol suite.
The focus of the lwIP TCP/IP implementation is to reduce the RAM usage
while still having a full scale TCP. This making lwIP suitable for use
in embedded systems with tens of kilobytes of free RAM and room for
around 40 kilobytes of code ROM.
+lwIP was originally developed by Adam Dunkels at the Computer and Networks
+Architectures (CNA) lab at the Swedish Institute of Computer Science (SICS)
+and is now developed and maintained by a worldwide network of developers.
+
FEATURES
- * IP (Internet Protocol) including packet forwarding over multiple network
- interfaces
+ * IP (Internet Protocol, IPv4 and IPv6) including packet forwarding over
+ multiple network interfaces
* ICMP (Internet Control Message Protocol) for network maintenance and debugging
* IGMP (Internet Group Management Protocol) for multicast traffic management
+ * MLD (Multicast listener discovery for IPv6). Aims to be compliant with
+ RFC 2710. No support for MLDv2
+ * ND (Neighbor discovery and stateless address autoconfiguration for IPv6).
+ Aims to be compliant with RFC 4861 (Neighbor discovery) and RFC 4862
+ (Address autoconfiguration)
+ * DHCP, AutoIP/APIPA (Zeroconf), ACD (Address Conflict Detection)
+ and (stateless) DHCPv6
* UDP (User Datagram Protocol) including experimental UDP-lite extensions
* TCP (Transmission Control Protocol) with congestion control, RTT estimation
- and fast recovery/fast retransmit
- * Specialized raw/native API for enhanced performance
+ fast recovery/fast retransmit and sending SACKs
+ * raw/native API for enhanced performance
* Optional Berkeley-like socket API
- * DNS (Domain names resolver)
- * SNMP (Simple Network Management Protocol)
- * DHCP (Dynamic Host Configuration Protocol)
- * AUTOIP (for IPv4, conform with RFC 3927)
- * PPP (Point-to-Point Protocol)
- * ARP (Address Resolution Protocol) for Ethernet
+ * TLS: optional layered TCP ("altcp") for nearly transparent TLS for any
+ TCP-based protocol (ported to mbedTLS) (see changelog for more info)
+ * PPPoS and PPPoE (Point-to-point protocol over Serial/Ethernet)
+ * DNS (Domain name resolver incl. mDNS)
+ * 6LoWPAN (via IEEE 802.15.4, BLE or ZEP)
+
+
+APPLICATIONS
+
+ * HTTP server with SSI and CGI (HTTPS via altcp)
+ * SNMPv2c agent with MIB compiler (Simple Network Management Protocol), v3 via altcp
+ * SNTP (Simple network time protocol)
+ * NetBIOS name service responder
+ * MDNS (Multicast DNS) responder
+ * iPerf server implementation
+ * MQTT client (TLS support via altcp)
+
LICENSE
lwIP is freely available under a BSD license.
+
DEVELOPMENT
lwIP has grown into an excellent TCP/IP stack for embedded devices,
@@ -40,45 +60,46 @@ and additions to the stack to further increase its usefulness.
Development of lwIP is hosted on Savannah, a central point for
software development, maintenance and distribution. Everyone can
-help improve lwIP by use of Savannah's interface, CVS and the
+help improve lwIP by use of Savannah's interface, Git and the
mailing list. A core team of developers will commit changes to the
-CVS source tree.
+Git source tree.
-The lwIP TCP/IP stack is maintained in the 'lwip' CVS module and
-contributions (such as platform ports) are in the 'contrib' module.
+The lwIP TCP/IP stack is maintained in the 'src' directory and
+contributions (such as platform ports and applications) are in
+the 'contrib' directory.
-See doc/savannah.txt for details on CVS server access for users and
+See doc/savannah.txt for details on Git server access for users and
developers.
-Last night's CVS tar ball can be downloaded from:
- http://savannah.gnu.org/cvs.backups/lwip.tar.gz [CHANGED - NEEDS FIXING]
-
-The current CVS trees are web-browsable:
- http://savannah.nongnu.org/cgi-bin/viewcvs/lwip/lwip/
- http://savannah.nongnu.org/cgi-bin/viewcvs/lwip/contrib/
+The current Git tree is web-browsable:
+ https://git.savannah.gnu.org/cgit/lwip.git
Submit patches and bugs via the lwIP project page:
- http://savannah.nongnu.org/projects/lwip/
+ https://savannah.nongnu.org/projects/lwip/
+Continuous integration builds (GCC, clang):
+ https://github.com/lwip-tcpip/lwip/actions
-DOCUMENTATION
-
-The original out-dated homepage of lwIP and Adam Dunkels' papers on
-lwIP are at the official lwIP home page:
- http://www.sics.se/~adam/lwip/
-Self documentation of the source code is regularly extracted from the
-current CVS sources and is available from this web page:
- http://www.nongnu.org/lwip/
+DOCUMENTATION
-There is now a constantly growin wiki about lwIP at
- http://lwip.wikia.com/wiki/LwIP_Wiki
+Self documentation of the source code is regularly extracted from the current
+Git sources and is available from this web page:
+ https://www.nongnu.org/lwip/
Also, there are mailing lists you can subscribe at
- http://savannah.nongnu.org/mail/?group=lwip
+ https://savannah.nongnu.org/mail/?group=lwip
plus searchable archives:
- http://lists.nongnu.org/archive/html/lwip-users/
- http://lists.nongnu.org/archive/html/lwip-devel/
+ https://lists.nongnu.org/archive/html/lwip-users/
+ https://lists.nongnu.org/archive/html/lwip-devel/
+
+There is a wiki about lwIP at
+ https://lwip.wikia.com/wiki/LwIP_Wiki
+You might get questions answered there, but unfortunately, it is not as
+well maintained as it should be.
+
+lwIP was originally written by Adam Dunkels:
+ http://dunkels.com/adam/
Reading Adam's papers, the files in docs/, browsing the source code
documentation and browsing the mailing list archives is a good way to
@@ -86,4 +107,3 @@ become familiar with the design of lwIP.
Adam Dunkels <adam(a)sics.se>
Leon Woestenberg <leon.woestenberg(a)gmx.net>
-
diff --git a/drivers/network/tcpip/lwip/UPGRADING b/drivers/network/tcpip/lwip/UPGRADING
index 6501107a7e8..0d357906c02 100644
--- a/drivers/network/tcpip/lwip/UPGRADING
+++ b/drivers/network/tcpip/lwip/UPGRADING
@@ -4,9 +4,153 @@ application written for an older version of lwIP to correctly work
with newer versions.
-(CVS HEAD)
+(git master)
* [Enter new changes just after this line - do not remove this line]
+ * The eth_addr_cmp and ip_addr_cmp set of functions have been renamed to eth_addr_eq, ip_addr_eq
+ and so on, since they return non-zero on equality. Macros for the old names exist.
+ * The sio_write function used by PPP now takes the data argument as const.
+
+(2.2.0)
+
+ ++ Repository changes:
+
+ * The contrib repository has been added into the main repository in the subdirectory 'contrib'
+ (the old contrib repository remains online for reference but is not used any more)
+
+(2.1.0)
+
+ ++ Application changes:
+
+ * Use the new altcp API for seamless TLS integration into existing TCP applications (see changelog)
+ * TCP only kills existing connections with a LOWER priority than the one currently being opened.
+ Previous implementations also kill existing connections of the SAME priority.
+ * ip4_route_src: parameter order is reversed: ip4_route_src(dest, src) -> ip4_route_src(src, dest)
+ to make parameter order consistent with other ip*_route*() functions.
+ Same also applies to LWIP_HOOK_IP4_ROUTE_SRC() parameter order.
+ * pbuf API: pbuf->type (an u8_t holding the enum 'pbuf_type') has changed to only hold a
+ description of the pbuf (e.g. data following pbuf struct, data volatile, allocation
+ source heap/pool/etc.). As a consequence, applications can't test pbuf->type any more.
+ Use pbuf_match_type(pbuf, type) instead.
+ * socket API: according to the standard, SO_ERROR now only returns asynchronous errors.
+ All other/normal/synchronous errors are (and always were) available via 'errno'.
+ LWIP_SOCKET_SET_ERRNO has been removed - 'errno' is always set - and required!
+ * httpd LWIP_HTTPD_CGI_SSI: httpd_cgi_handler() has an additional parameter "struct fs_file *"
+
+ ++ Port changes:
+
+ * tcpip_trycallback() was renamed to tcpip_callbackmsg_trycallback() to avoid confusion
+ with tcpip_try_callback()
+ * compatibility headers: moved from 'src/include/posix' to 'src/include/compat/posix',
+ 'src/include/compat/stdc' etc.
+ * The IPv6 implementation now supports address scopes. (See LWIP_IPV6_SCOPES documentation
+ and ip6_zone.h for more documentation)
+ * LWIP_HOOK_DHCP_APPEND_OPTIONS() has changed, see description in opt.h (options_out_len is not
+ available in struct dhcp any more)
+ * Added debug helper asserts to ensure threading/locking requirements are met (define
+ LWIP_MARK_TCPIP_THREAD() and LWIP_ASSERT_CORE_LOCKED()).
+ * Added sys_mbox_trypost_fromisr() and tcpip_callbackmsg_trycallback_fromisr()
+ These can be used to post preallocated messages from an ISR to the tcpip thread
+ (e.g. when using FreeRTOS)
+
+(2.0.2)
+
+ ++ Application changes:
+
+ * slipif: The way to pass serial port number has changed. netif->num is not
+ supported any more, netif->state is interpreted as an u8_t port number now
+ (it's not a POINTER to an u8_t any more!)
+
+(2.0.1)
+
+ ++ Application changes:
+
+ * UDP does NOT receive multicast traffic from ALL netifs on an UDP PCB bound to a specific
+ netif any more. Users need to bind to IP_ADDR_ANY to receive multicast traffic and compare
+ ip_current_netif() to the desired netif for every packet.
+ See bug #49662 for an explanation.
+
+(2.0.0)
+
+ ++ Application changes:
+
+ * Changed netif "up" flag handling to be an administrative flag (as opposed to the previous meaning of
+ "ip4-address-valid", a netif will now not be used for transmission if not up) -> even a DHCP netif
+ has to be set "up" before starting the DHCP client
+ * Added IPv6 support (dual-stack or IPv4/IPv6 only)
+ * Changed ip_addr_t to be a union in dual-stack mode (use ip4_addr_t where referring to IPv4 only).
+ * Major rewrite of SNMP (added MIB parser that creates code stubs for custom MIBs);
+ supports SNMPv2c (experimental v3 support)
+ * Moved some core applications from contrib repository to src/apps (and include/lwip/apps)
+
+ +++ Raw API:
+ * Changed TCP listen backlog: removed tcp_accepted(), added the function pair tcp_backlog_delayed()/
+ tcp_backlog_accepted() to explicitly delay backlog handling on a connection pcb
+
+ +++ Socket API:
+ * Added an implementation for posix sendmsg()
+ * Added LWIP_FIONREAD_LINUXMODE that makes ioctl/FIONREAD return the size of the next pending datagram
+
+ ++ Port changes
+
+ +++ new files:
+ * MANY new and moved files!
+ * Added src/Filelists.mk for use in Makefile projects
+ * Continued moving stack-internal parts from abc.h to abc_priv.h in sub-folder "priv"
+ to let abc.h only contain the actual application programmer's API
+
+ +++ sys layer:
+ * Made LWIP_TCPIP_CORE_LOCKING==1 the default as it usually performs better than
+ the traditional message passing (although with LWIP_COMPAT_MUTEX you are still
+ open to priority inversion, so this is not recommended any more)
+ * Added LWIP_NETCONN_SEM_PER_THREAD to use one "op_completed" semaphore per thread
+ instead of using one per netconn (these semaphores are used even with core locking
+ enabled as some longer lasting functions like big writes still need to delay)
+ * Added generalized abstraction for itoa(), strnicmp(), stricmp() and strnstr()
+ in def.h (to be overridden in cc.h) instead of config
+ options for netbiosns, httpd, dns, etc. ...
+ * New abstraction for hton* and ntoh* functions in def.h.
+ To override them, use the following in cc.h:
+ #define lwip_htons(x) <your_htons>
+ #define lwip_htonl(x) <your_htonl>
+
+ +++ new options:
+ * TODO
+
+ +++ new pools:
+ * Added LWIP_MEMPOOL_* (declare/init/alloc/free) to declare private memp pools
+ that share memp.c code but do not have to be made global via lwippools.h
+ * Added pools for IPv6, MPU_COMPATIBLE, dns-api, netif-api, etc.
+ * added hook LWIP_HOOK_MEMP_AVAILABLE() to get informed when a memp pool was empty and an item
+ is now available
+
+ * Signature of LWIP_HOOK_VLAN_SET macro was changed
+
+ * LWIP_DECLARE_MEMORY_ALIGNED() may be used to declare aligned memory buffers (mem/memp)
+ or to move buffers to dedicated memory using compiler attributes
+
+ * Standard C headers are used to define sized types and printf formatters
+ (disable by setting LWIP_NO_STDINT_H=1 or LWIP_NO_INTTYPES_H=1 if your compiler
+ does not support these)
+
+
+ ++ Major bugfixes/improvements
+
+ * Added IPv6 support (dual-stack or IPv4/IPv6 only)
+ * Major rewrite of PPP (incl. keep-up with apache pppd)
+ see doc/ppp.txt for an upgrading how-to
+ * Major rewrite of SNMP (incl. MIB parser)
+ * Fixed timing issues that might have lead to losing a DHCP lease
+ * Made rx processing path more robust against crafted errors
+ * TCP window scaling support
+ * modification of api modules to support FreeRTOS-MPU (don't pass stack-pointers to other threads)
+ * made DNS client more robust
+ * support PBUF_REF for RX packets
+ * LWIP_NETCONN_FULLDUPLEX allows netconn/sockets to be used for reading/writing from separate
+ threads each (needs LWIP_NETCONN_SEM_PER_THREAD)
+ * Moved and reordered stats (mainly memp/mib2)
+
+(1.4.0)
++ Application changes:
diff --git a/drivers/network/tcpip/lwip/codespell_changed_files.sh b/drivers/network/tcpip/lwip/codespell_changed_files.sh
new file mode 100644
index 00000000000..638a18e2019
--- /dev/null
+++ b/drivers/network/tcpip/lwip/codespell_changed_files.sh
@@ -0,0 +1,26 @@
+# Copyright 2017 Kaspar Schleiser <kaspar(a)schleiser.de>
+# Copyright 2014 Ludwig Knüpfer <ludwig.knuepfer(a)fu-berlin.de>
+# Copyright 2014 Hinnerk van Bruinehsen <h.v.bruinehsen(a)fu-berlin.de>
+# Copyright 2020 Jonathan Demeyer <jona.dem(a)gmail.com>
+#
+# This file is subject to the terms and conditions of the GNU Lesser
+# General Public License v2.1. See the file LICENSE in the top level
+# directory for more details.
+
+changed_files() {
+ : ${FILEREGEX:='\.([CcHh])$'}
+ : ${EXCLUDE:=''}
+ : ${DIFFFILTER:='ACMR'}
+
+ DIFFFILTER="--diff-filter=${DIFFFILTER}"
+
+ # select either all or only touched-in-branch files, filter through FILEREGEX
+ if [ -z "${BASE_BRANCH}" ]; then
+ FILES="$(git ls-tree -r --full-tree --name-only HEAD | grep -E ${FILEREGEX})"
+ else
+ FILES="$(git diff ${DIFFFILTER} --name-only ${BASE_BRANCH} | grep -E ${FILEREGEX})"
+ fi
+
+ # filter out negatives
+ echo "${FILES}" | grep -v -E ${EXCLUDE}
+}
diff --git a/drivers/network/tcpip/lwip/codespell_check.sh b/drivers/network/tcpip/lwip/codespell_check.sh
new file mode 100755
index 00000000000..7d8d0dfb75a
--- /dev/null
+++ b/drivers/network/tcpip/lwip/codespell_check.sh
@@ -0,0 +1,57 @@
+#!/usr/bin/env bash
+
+# Copyright 2019 Alexandre Abadie <alexandre.abadie(a)inria.fr>
+#
+# This file is subject to the terms and conditions of the GNU Lesser
+# General Public License v2.1. See the file LICENSE in the top level
+# directory for more details.
+
+CODESPELL_CMD="codespell"
+
+if tput colors &> /dev/null && [ "$(tput colors)" -ge 8 ]; then
+ CERROR=$'\033[1;31m'
+ CRESET=$'\033[0m'
+else
+ CERROR=
+ CRESET=
+fi
+
+: "${LWIPBASE:=$(cd $(dirname $0)/; pwd)}"
+cd $LWIPBASE
+
+: "${LWIPTOOLS:=${LWIPBASE}}"
+. "${LWIPTOOLS}"/codespell_changed_files.sh
+
+FILEREGEX='\.([CcHh]|sh|py|md|txt)$'
+EXCLUDE='^(./contrib/apps/LwipMibCompiler/Mibs)'
+FILES=$(FILEREGEX=${FILEREGEX} EXCLUDE=${EXCLUDE} changed_files)
+
+if [ -z "${FILES}" ]; then
+ exit 0
+fi
+
+${CODESPELL_CMD} --version &> /dev/null || {
+ printf "%s%s: cannot execute \"%s\"!%s\n" "${CERROR}" "$0" "${CODESPELL_CMD}" "${CRESET}"
+ exit 1
+}
+
+CODESPELL_OPTS="-q 2" # Disable "WARNING: Binary file"
+CODESPELL_OPTS+=" --check-hidden"
+# Disable false positives "nd => and, 2nd", "ans => and", "tolen => token",
+# "ofo => of", "WAN => WANT", "mut => must, mutt, moot"
+CODESPELL_OPTS+=" --ignore-words-list=nd,ans,tolen,ofo,wan,mut "
+# propagate all options to codespell -> pass "-w" to this script to write changes
+CODESPELL_OPTS+="$@"
+
+# Filter-out all false positive raising "disabled due to" messages.
+ERRORS=$(${CODESPELL_CMD} ${CODESPELL_OPTS} ${FILES} | grep -ve "disabled due to")
+
+if [ -n "${ERRORS}" ]
+then
+ printf "%sThere are typos in the following files:%s\n\n" "${CERROR}" "${CRESET}"
+ printf "%s\n" "${ERRORS}"
+ # TODO: return 1 when all typos are fixed
+ exit 0
+else
+ exit 0
+fi
diff --git a/drivers/network/tcpip/lwip/doc/FILES b/drivers/network/tcpip/lwip/doc/FILES
index 05d356f4f9e..155a82cb336 100644
--- a/drivers/network/tcpip/lwip/doc/FILES
+++ b/drivers/network/tcpip/lwip/doc/FILES
@@ -1,6 +1,6 @@
+doxygen/ - Configuration files and scripts to create the lwIP doxygen source
+ documentation (found at http://www.nongnu.org/lwip/)
+
savannah.txt - How to obtain the current development source code.
contrib.txt - How to contribute to lwIP as a developer.
-rawapi.txt - The documentation for the core API of lwIP.
- Also provides an overview about the other APIs and multithreading.
-snmp_agent.txt - The documentation for the lwIP SNMP agent.
-sys_arch.txt - The documentation for a system abstraction layer of lwIP.
+ppp.txt - Documentation of the PPP interface for lwIP.
diff --git a/drivers/network/tcpip/lwip/doc/NO_SYS_SampleCode.c b/drivers/network/tcpip/lwip/doc/NO_SYS_SampleCode.c
new file mode 100644
index 00000000000..b263420c68d
--- /dev/null
+++ b/drivers/network/tcpip/lwip/doc/NO_SYS_SampleCode.c
@@ -0,0 +1,121 @@
+void
+eth_mac_irq()
+{
+ /* Service MAC IRQ here */
+
+ /* Allocate pbuf from pool (avoid using heap in interrupts) */
+ struct pbuf* p = pbuf_alloc(PBUF_RAW, eth_data_count, PBUF_POOL);
+
+ if(p != NULL) {
+ /* Copy ethernet frame into pbuf */
+ pbuf_take(p, eth_data, eth_data_count);
+
+ /* Put in a queue which is processed in main loop */
+ if(!queue_try_put(&queue, p)) {
+ /* queue is full -> packet loss */
+ pbuf_free(p);
+ }
+ }
+}
+
+static err_t
+netif_output(struct netif *netif, struct pbuf *p)
+{
+ LINK_STATS_INC(link.xmit);
+
+ /* Update SNMP stats (only if you use SNMP) */
+ MIB2_STATS_NETIF_ADD(netif, ifoutoctets, p->tot_len);
+ int unicast = ((p->payload[0] & 0x01) == 0);
+ if (unicast) {
+ MIB2_STATS_NETIF_INC(netif, ifoutucastpkts);
+ } else {
+ MIB2_STATS_NETIF_INC(netif, ifoutnucastpkts);
+ }
+
+ lock_interrupts();
+ pbuf_copy_partial(p, mac_send_buffer, p->tot_len, 0);
+ /* Start MAC transmit here */
+ unlock_interrupts();
+
+ return ERR_OK;
+}
+
+static void
+netif_status_callback(struct netif *netif)
+{
+ printf("netif status changed %s\n", ip4addr_ntoa(netif_ip4_addr(netif)));
+}
+
+static err_t
+netif_init(struct netif *netif)
+{
+ netif->linkoutput = netif_output;
+ netif->output = etharp_output;
+ netif->output_ip6 = ethip6_output;
+ netif->mtu = ETHERNET_MTU;
+ netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_ETHERNET | NETIF_FLAG_IGMP | NETIF_FLAG_MLD6;
+ MIB2_INIT_NETIF(netif, snmp_ifType_ethernet_csmacd, 100000000);
+
+ SMEMCPY(netif->hwaddr, your_mac_address_goes_here, ETH_HWADDR_LEN);
+ netif->hwaddr_len = ETH_HWADDR_LEN;
+
+ return ERR_OK;
+}
+
+void
+main(void)
+{
+ struct netif netif;
+
+ lwip_init();
+
+ netif_add(&netif, IP4_ADDR_ANY, IP4_ADDR_ANY, IP4_ADDR_ANY, NULL, netif_init, netif_input);
+ netif.name[0] = 'e';
+ netif.name[1] = '0';
+ netif_create_ip6_linklocal_address(&netif, 1);
+ netif_set_status_callback(&netif, netif_status_callback);
+ netif_set_default(&netif);
+ netif_set_up(&netif);
+
+ /* Start DHCP and HTTPD */
+ dhcp_start(&netif );
+ httpd_init();
+
+ while(1) {
+ /* Check link state, e.g. via MDIO communication with PHY */
+ if(link_state_changed()) {
+ if(link_is_up()) {
+ netif_set_link_up(&netif);
+ } else {
+ netif_set_link_down(&netif);
+ }
+ }
+
+ /* Check for received frames, feed them to lwIP */
+ lock_interrupts();
+ struct pbuf* p = queue_try_get(&queue);
+ unlock_interrupts();
+
+ if(p != NULL) {
+ LINK_STATS_INC(link.recv);
+
+ /* Update SNMP stats (only if you use SNMP) */
+ MIB2_STATS_NETIF_ADD(netif, ifinoctets, p->tot_len);
+ int unicast = ((p->payload[0] & 0x01) == 0);
+ if (unicast) {
+ MIB2_STATS_NETIF_INC(netif, ifinucastpkts);
+ } else {
+ MIB2_STATS_NETIF_INC(netif, ifinnucastpkts);
+ }
+
+ if(netif.input(p, &netif) != ERR_OK) {
+ pbuf_free(p);
+ }
+ }
+
+ /* Cyclic lwIP timers check */
+ sys_check_timeouts();
+
+ /* your application goes here */
+ }
+}
diff --git a/drivers/network/tcpip/lwip/doc/ZeroCopyRx.c b/drivers/network/tcpip/lwip/doc/ZeroCopyRx.c
new file mode 100644
index 00000000000..600b13a0f3f
--- /dev/null
+++ b/drivers/network/tcpip/lwip/doc/ZeroCopyRx.c
@@ -0,0 +1,45 @@
+typedef struct my_custom_pbuf
+{
+ struct pbuf_custom p;
+ void* dma_descriptor;
+} my_custom_pbuf_t;
+
+LWIP_MEMPOOL_DECLARE(RX_POOL, 10, sizeof(my_custom_pbuf_t), "Zero-copy RX PBUF pool");
+
+void my_pbuf_free_custom(void* p)
+{
+ SYS_ARCH_DECL_PROTECT(old_level);
+
+ my_custom_pbuf_t* my_puf = (my_custom_pbuf_t*)p;
+
+ // invalidate data cache here - lwIP and/or application may have written into buffer!
+ // (invalidate is faster than flushing, and no one needs the correct data in the buffer)
+ invalidate_cpu_cache(p->payload, p->tot_len);
+
+ SYS_ARCH_PROTECT(old_level);
+ free_rx_dma_descriptor(my_pbuf->dma_descriptor);
+ LWIP_MEMPOOL_FREE(RX_POOL, my_pbuf);
+ SYS_ARCH_UNPROTECT(old_level);
+}
+
+void eth_rx_irq()
+{
+ dma_descriptor* dma_desc = get_RX_DMA_descriptor_from_ethernet();
+ my_custom_pbuf_t* my_pbuf = (my_custom_pbuf_t*)LWIP_MEMPOOL_ALLOC(RX_POOL);
+
+ my_pbuf->p.custom_free_function = my_pbuf_free_custom;
+ my_pbuf->dma_descriptor = dma_desc;
+
+ invalidate_cpu_cache(dma_desc->rx_data, dma_desc->rx_length);
+
+ struct pbuf* p = pbuf_alloced_custom(PBUF_RAW,
+ dma_desc->rx_length,
+ PBUF_REF,
+ &my_pbuf->p,
+ dma_desc->rx_data,
+ dma_desc->max_buffer_size);
+
+ if(netif->input(p, netif) != ERR_OK) {
+ pbuf_free(p);
+ }
+}
diff --git a/drivers/network/tcpip/lwip/doc/contrib.txt b/drivers/network/tcpip/lwip/doc/contrib.txt
index 39596fca335..2a44857e4ba 100644
--- a/drivers/network/tcpip/lwip/doc/contrib.txt
+++ b/drivers/network/tcpip/lwip/doc/contrib.txt
@@ -34,30 +34,25 @@ features of Savannah help us not lose users' input.
2.3 Bug reports and patches:
1. Make sure you are reporting bugs or send patches against the latest
- sources. (From the latest release and/or the current CVS sources.)
+ sources. (From the latest release and/or the current Git sources.)
2. If you think you found a bug make sure it's not already filed in the
bugtracker at Savannah.
3. If you have a fix put the patch on Savannah. If it is a patch that affects
both core and arch specific stuff please separate them so that the core can
- be applied separately while leaving the other patch 'open'. The prefered way
+ be applied separately while leaving the other patch 'open'. The preferred way
is to NOT touch archs you can't test and let maintainers take care of them.
This is a good way to see if they are used at all - the same goes for unix
netifs except tapif.
4. Do not file a bug and post a fix to it to the patch area. Either a bug report
or a patch will be enough.
If you correct an existing bug then attach the patch to the bug rather than creating a new entry in the patch area.
-5. Trivial patches (compiler warning, indentation and spelling fixes or anything obvious which takes a line or two)
- can go to the lwip-users list. This is still the fastest way of interaction and the list is not so crowded
- as to allow for loss of fixes. Putting bugs on Savannah and subsequently closing them is too much an overhead
- for reporting a compiler warning fix.
-6. Patches should be specific to a single change or to related changes.Do not mix bugfixes with spelling and other
- trivial fixes unless the bugfix is trivial too.Do not reorganize code and rename identifiers in the same patch you
- change behaviour if not necessary.A patch is easier to read and understand if it's to the point and short than
+5. Patches should be specific to a single change or to related changes. Do not mix bugfixes with spelling and other
+ trivial fixes unless the bugfix is trivial too. Do not reorganize code and rename identifiers in the same patch you
+ change behaviour if not necessary. A patch is easier to read and understand if it's to the point and short than
if it's not to the point and long :) so the chances for it to be applied are greater.
2.4 Platform porters:
1. If you have ported lwIP to a platform (an OS, a uC/processor or a combination of these) and
you think it could benefit others[1] you might want discuss this on the mailing list. You
- can also ask for CVS access to submit and maintain your port in the contrib CVS module.
-
\ No newline at end of file
+ can also ask for Git access to submit and maintain your port in the lwIP/contrib subdir.
diff --git a/drivers/network/tcpip/lwip/doc/doxygen/generate.bat b/drivers/network/tcpip/lwip/doc/doxygen/generate.bat
new file mode 100644
index 00000000000..99afb124bec
--- /dev/null
+++ b/drivers/network/tcpip/lwip/doc/doxygen/generate.bat
@@ -0,0 +1 @@
+doxygen lwip.Doxyfile
diff --git a/drivers/network/tcpip/lwip/doc/doxygen/generate.sh b/drivers/network/tcpip/lwip/doc/doxygen/generate.sh
new file mode 100755
index 00000000000..89344b0e812
--- /dev/null
+++ b/drivers/network/tcpip/lwip/doc/doxygen/generate.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+doxygen lwip.Doxyfile
diff --git a/drivers/network/tcpip/lwip/doc/doxygen/lwip.Doxyfile b/drivers/network/tcpip/lwip/doc/doxygen/lwip.Doxyfile
new file mode 100644
index 00000000000..4b4d2ec5b1d
--- /dev/null
+++ b/drivers/network/tcpip/lwip/doc/doxygen/lwip.Doxyfile
@@ -0,0 +1,2516 @@
+# Doxyfile 1.8.13
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME = "lwIP"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER = "2.2.0"
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF = "Lightweight IP stack"
+
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
+
+PROJECT_LOGO =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = "output"
+
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
+
+CREATE_SUBDIRS = NO
+
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF = "The $name class " \
+ "The $name widget " \
+ "The $name file " \
+ is \
+ provides \
+ specifies \
+ contains \
+ represents \
+ a \
+ an \
+ the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH = ../../
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
+# page for each member. If set to NO, the documentation of a member will be part
+# of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE = 8
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
+
+ALIASES =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note: For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT = YES
+
+# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
+# to that level are automatically included in the table of contents, even if
+# they do not have an id attribute.
+# Note: This feature currently applies only to Markdown headings.
+# Minimum value: 0, maximum value: 99, default value: 0.
+# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
+
+TOC_INCLUDE_HEADINGS = 0
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# If one adds a struct or class to a group and this option is enabled, then also
+# any nested class or struct is added to the same group. By default this option
+# is disabled and one has to add nested compounds explicitly via \ingroup.
+# The default value is: NO.
+
+GROUP_NESTED_COMPOUNDS = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. If set to YES, local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO, only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS = YES
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES = YES
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO, these declarations will be
+# included in the documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO, these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES, upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
+
+CASE_SENSE_NAMES = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES, the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
+# list. This list is created by putting \todo commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST = NO
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
+# list. This list is created by putting \test commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES, the
+# list will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
+
+CITE_BIB_FILES =
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO, doxygen will only warn about wrong or incomplete
+# parameter documentation, but not about the absence of documentation.
+# The default value is: NO.
+
+WARN_NO_PARAMDOC = NO
+
+# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
+# a warning is encountered.
+# The default value is: NO.
+
+WARN_AS_ERROR = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT = "$file:$line: $text "
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
+# Note: If this tag is empty the current directory is searched.
+
+INPUT = main_page.h \
+ ../../src
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by doxygen.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
+# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
+# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf.
+
+FILE_PATTERNS = *.c \
+ *.cc \
+ *.cxx \
+ *.cpp \
+ *.c++ \
+ *.java \
+ *.ii \
+ *.ixx \
+ *.ipp \
+ *.i++ \
+ *.inl \
+ *.h \
+ *.hh \
+ *.hxx \
+ *.hpp \
+ *.h++ \
+ *.idl \
+ *.odl \
+ *.inc \
+ *.m \
+ *.mm \
+ *.dox
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE = ../../src/include/netif/ppp/polarssl
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH = ../ \
+ ../../
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS = *
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
... 188526 lines suppressed ...