Skip to content

Commit

Permalink
lwip2 fix and update (#4729)
Browse files Browse the repository at this point in the history
* interactive example: update with option for using DHCP again after using static IP
* lwip2: avoid crash when IP address is set to 0(any) by dhcp not getting its lease renewal in due time
* lwip2: automatically remove oldest PCBs in time-wait state, limit their number
  thanks to @me-no-dev 07f4d4c#diff-f8258e71e25fb9985ca3799e3d8b88ecR399
* faq: update about tcpCleanup()
* lwip2: add a macro HAS_PHY_CAPTURE=1 indicating capture facility is available
  • Loading branch information
d-a-v authored May 25, 2018
1 parent 144152c commit 1a9403d
Show file tree
Hide file tree
Showing 8 changed files with 45 additions and 6 deletions.
11 changes: 9 additions & 2 deletions doc/faq/readme.rst
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,15 @@ This error may pop up after switching between
How to clear TCP PCBs in time-wait state ?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This is needed with lwIP-v1.4, less needed with lwIP-v2 but timeout is still
too high.
This is not needed anymore:

PCBs in time-wait state are limited to 5 and removed when that number is
exceeded.

Ref. `lwIP-v1.4 <https://github.com/esp8266/Arduino/commit/07f4d4c241df2c552899857f39a4295164f686f2#diff-f8258e71e25fb9985ca3799e3d8b88ecR399>`__,
`lwIP-v2 <https://github.com/d-a-v/esp82xx-nonos-linklayer/commit/420960dfc0dbe07114f7364845836ac333bc84f7>`__

For reference:

Time-wait PCB state helps TCP not confusing two consecutive connections with the
same (s-ip,s-port,d-ip,d-port) when the first is already closed but still
Expand Down
4 changes: 2 additions & 2 deletions libraries/esp8266/examples/interactive/interactive.ino
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ void loop() {
case 'n': DO(WiFi.setSleepMode(WIFI_NONE_SLEEP));
case 'l': DO(WiFi.setSleepMode(WIFI_LIGHT_SLEEP));
case 'm': DO(WiFi.setSleepMode(WIFI_MODEM_SLEEP));
case 's': DO(WiFi.config(staticip, gateway, subnet));
case 'D': DO(wifi_station_dhcpc_start());
case 'S': DO(WiFi.config(staticip, gateway, subnet)); // use static address
case 's': DO(WiFi.config(0u, 0u, 0u)); // back to dhcp client
}
}
Binary file modified tools/sdk/lib/liblwip2.a
Binary file not shown.
Binary file modified tools/sdk/lib/liblwip2_1460.a
Binary file not shown.
1 change: 1 addition & 0 deletions tools/sdk/lwip2/include/gluedebug.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#ifdef __cplusplus
extern "C"
#endif
#define HAS_PHY_CAPTURE 1
void (*phy_capture) (int netif_idx, const char* data, size_t len, int out, int success);

/////////////////////////////////////////////////////////////////////////////
Expand Down
2 changes: 1 addition & 1 deletion tools/sdk/lwip2/include/lwip-git-hash.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// generated by makefiles/make-lwip2-hash
#ifndef LWIP_HASH_H
#define LWIP_HASH_H
#define LWIP_HASH_STR "STABLE-2_0_3_RELEASE/glue:arduino-2.4.1-7-g2b827f8"
#define LWIP_HASH_STR "STABLE-2_0_3_RELEASE/glue:arduino-2.4.1-10-g0c0d8c2"
#endif // LWIP_HASH_H
31 changes: 31 additions & 0 deletions tools/sdk/lwip2/include/lwipopts.h
Original file line number Diff line number Diff line change
Expand Up @@ -2997,6 +2997,7 @@

/*
--------------------------------------------------
------------- End of original lwipopts -----------
--------------------------------------------------
*/

Expand All @@ -3013,4 +3014,34 @@ struct netif;
#endif
LWIP_ERR_T lwip_unhandled_packet (struct pbuf* pbuf, struct netif* netif) __attribute__((weak));

/*
--------------------------------------------------
----------------- TIME-WAIT tweak ----------------
--------------------------------------------------
port @me-no-dev time-wait tweak
https://github.com/esp8266/Arduino/commit/07f4d4c241df2c552899857f39a4295164f686f2#diff-f8258e71e25fb9985ca3799e3d8b88ecR399
*/

void tcp_kill_timewait (void);
#define TCP_TW_LIMIT(l) \
if (l) do { \
u32_t count_plus_1 = 1; \
struct tcp_pcb* tmp = tcp_tw_pcbs; \
if (tmp) \
while ((tmp = tmp->next)) \
++count_plus_1; \
while (--count_plus_1 > (l)) \
/* kill the oldest */ \
/* pcb in TW state */ \
tcp_kill_timewait(); \
} while (0)

/**
* MEMP_NUM_TCP_PCB_TIME_WAIT: the number of TCP pcbs in TIME_WAIT state.
* (requires the LWIP_TCP option, 0 = disabled)
*/
#ifndef MEMP_NUM_TCP_PCB_TIME_WAIT
#define MEMP_NUM_TCP_PCB_TIME_WAIT 5
#endif

#endif // MYLWIPOPTS_H

0 comments on commit 1a9403d

Please sign in to comment.