mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-19 23:22:16 +03:00
lwip2 fix and update (#4729)
* 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 07f4d4c241 (diff-f8258e71e25fb9985ca3799e3d8b88ecR399)
* faq: update about tcpCleanup()
* lwip2: add a macro HAS_PHY_CAPTURE=1 indicating capture facility is available
This commit is contained in:
parent
144152ce6b
commit
1a9403df1b
@ -93,8 +93,15 @@ This error may pop up after switching between
|
|||||||
How to clear TCP PCBs in time-wait state ?
|
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
|
This is not needed anymore:
|
||||||
too high.
|
|
||||||
|
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
|
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
|
same (s-ip,s-port,d-ip,d-port) when the first is already closed but still
|
||||||
|
@ -85,7 +85,7 @@ void loop() {
|
|||||||
case 'n': DO(WiFi.setSleepMode(WIFI_NONE_SLEEP));
|
case 'n': DO(WiFi.setSleepMode(WIFI_NONE_SLEEP));
|
||||||
case 'l': DO(WiFi.setSleepMode(WIFI_LIGHT_SLEEP));
|
case 'l': DO(WiFi.setSleepMode(WIFI_LIGHT_SLEEP));
|
||||||
case 'm': DO(WiFi.setSleepMode(WIFI_MODEM_SLEEP));
|
case 'm': DO(WiFi.setSleepMode(WIFI_MODEM_SLEEP));
|
||||||
case 's': DO(WiFi.config(staticip, gateway, subnet));
|
case 'S': DO(WiFi.config(staticip, gateway, subnet)); // use static address
|
||||||
case 'D': DO(wifi_station_dhcpc_start());
|
case 's': DO(WiFi.config(0u, 0u, 0u)); // back to dhcp client
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -1 +1 @@
|
|||||||
Subproject commit 2b827f842925b2daf12b67ab1ae498e58174124e
|
Subproject commit 0c0d8c2fb90de1fc1a956c89984b74dcdd7bf8dc
|
@ -35,6 +35,7 @@
|
|||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C"
|
extern "C"
|
||||||
#endif
|
#endif
|
||||||
|
#define HAS_PHY_CAPTURE 1
|
||||||
void (*phy_capture) (int netif_idx, const char* data, size_t len, int out, int success);
|
void (*phy_capture) (int netif_idx, const char* data, size_t len, int out, int success);
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// generated by makefiles/make-lwip2-hash
|
// generated by makefiles/make-lwip2-hash
|
||||||
#ifndef LWIP_HASH_H
|
#ifndef LWIP_HASH_H
|
||||||
#define 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
|
#endif // LWIP_HASH_H
|
||||||
|
@ -2997,6 +2997,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
------------- End of original lwipopts -----------
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -3013,4 +3014,34 @@ struct netif;
|
|||||||
#endif
|
#endif
|
||||||
LWIP_ERR_T lwip_unhandled_packet (struct pbuf* pbuf, struct netif* netif) __attribute__((weak));
|
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
|
#endif // MYLWIPOPTS_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user