mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Merge branch 'bugfix/tw8242_fix_tcp_rx_abnormal_issue' into 'master'
lwip: fix tcp rx abnormal issue(tw8242) In tcp_alloc(), initialize per_soc_tcp_wnd before initializing recv_wnd because recv_wnd depends on per_soc_tcp_wnd. See merge request !160
This commit is contained in:
commit
c7f8d206ed
@ -135,7 +135,7 @@
|
|||||||
//#endif
|
//#endif
|
||||||
#else /* LWIP_WND_SCALE */
|
#else /* LWIP_WND_SCALE */
|
||||||
|
|
||||||
#if (ESP_PER_SOC_TCP_WND == 0)
|
#if ! ESP_PER_SOC_TCP_WND
|
||||||
#if (LWIP_TCP && (TCP_WND > 0xffff))
|
#if (LWIP_TCP && (TCP_WND > 0xffff))
|
||||||
#error "If you want to use TCP, TCP_WND must fit in an u16_t, so, you have to reduce it in your lwipopts.h (or enable window scaling)"
|
#error "If you want to use TCP, TCP_WND must fit in an u16_t, so, you have to reduce it in your lwipopts.h (or enable window scaling)"
|
||||||
#endif
|
#endif
|
||||||
@ -143,11 +143,11 @@
|
|||||||
|
|
||||||
#endif /* LWIP_WND_SCALE */
|
#endif /* LWIP_WND_SCALE */
|
||||||
|
|
||||||
#if (ESP_PER_SOC_TCP_WND == 0)
|
#if ! ESP_PER_SOC_TCP_WND
|
||||||
#if (LWIP_TCP && (TCP_SND_QUEUELEN > 0xffff))
|
#if (LWIP_TCP && (TCP_SND_QUEUELEN(0) > 0xffff))
|
||||||
#error "If you want to use TCP, TCP_SND_QUEUELEN must fit in an u16_t, so, you have to reduce it in your lwipopts.h"
|
#error "If you want to use TCP, TCP_SND_QUEUELEN must fit in an u16_t, so, you have to reduce it in your lwipopts.h"
|
||||||
#endif
|
#endif
|
||||||
#if (LWIP_TCP && (TCP_SND_QUEUELEN < 2))
|
#if (LWIP_TCP && (TCP_SND_QUEUELEN(0) < 2))
|
||||||
#error "TCP_SND_QUEUELEN must be at least 2 for no-copy TCP writes to work"
|
#error "TCP_SND_QUEUELEN must be at least 2 for no-copy TCP writes to work"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -286,25 +286,25 @@
|
|||||||
|
|
||||||
/* TCP sanity checks */
|
/* TCP sanity checks */
|
||||||
#if !LWIP_DISABLE_TCP_SANITY_CHECKS
|
#if !LWIP_DISABLE_TCP_SANITY_CHECKS
|
||||||
|
#if ! ESP_PER_SOC_TCP_WND
|
||||||
#if LWIP_TCP
|
#if LWIP_TCP
|
||||||
#if !MEMP_MEM_MALLOC && (MEMP_NUM_TCP_SEG < TCP_SND_QUEUELEN)
|
#if !MEMP_MEM_MALLOC && (MEMP_NUM_TCP_SEG < TCP_SND_QUEUELEN(0))
|
||||||
#error "lwip_sanity_check: WARNING: MEMP_NUM_TCP_SEG should be at least as big as TCP_SND_QUEUELEN. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
|
#error "lwip_sanity_check: WARNING: MEMP_NUM_TCP_SEG should be at least as big as TCP_SND_QUEUELEN. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (ESP_PER_SOC_TCP_WND == 0)
|
#if TCP_SND_BUF(0) < (2 * TCP_MSS)
|
||||||
#if TCP_SND_BUF < (2 * TCP_MSS)
|
|
||||||
#error "lwip_sanity_check: WARNING: TCP_SND_BUF must be at least as much as (2 * TCP_MSS) for things to work smoothly. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
|
#error "lwip_sanity_check: WARNING: TCP_SND_BUF must be at least as much as (2 * TCP_MSS) for things to work smoothly. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
|
||||||
#endif
|
#endif
|
||||||
#if TCP_SND_QUEUELEN < (2 * (TCP_SND_BUF / TCP_MSS))
|
#if TCP_SND_QUEUELEN(0) < (2 * (TCP_SND_BUF(0) / TCP_MSS))
|
||||||
#error "lwip_sanity_check: WARNING: TCP_SND_QUEUELEN must be at least as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
|
#error "lwip_sanity_check: WARNING: TCP_SND_QUEUELEN must be at least as much as (2 * TCP_SND_BUF(0)/TCP_MSS) for things to work. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
|
||||||
#endif
|
#endif
|
||||||
#if TCP_SNDLOWAT >= TCP_SND_BUF
|
#if TCP_SNDLOWAT >= TCP_SND_BUF(0)
|
||||||
#error "lwip_sanity_check: WARNING: TCP_SNDLOWAT must be less than TCP_SND_BUF. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
|
#error "lwip_sanity_check: WARNING: TCP_SNDLOWAT must be less than TCP_SND_BUF. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
|
||||||
#endif
|
#endif
|
||||||
#if TCP_SNDLOWAT >= (0xFFFF - (4 * TCP_MSS))
|
#if TCP_SNDLOWAT >= (0xFFFF - (4 * TCP_MSS))
|
||||||
#error "lwip_sanity_check: WARNING: TCP_SNDLOWAT must at least be 4*MSS below u16_t overflow!"
|
#error "lwip_sanity_check: WARNING: TCP_SNDLOWAT must at least be 4*MSS below u16_t overflow!"
|
||||||
#endif
|
#endif
|
||||||
#if TCP_SNDQUEUELOWAT >= TCP_SND_QUEUELEN
|
#if TCP_SNDQUEUELOWAT >= TCP_SND_QUEUELEN(0)
|
||||||
#error "lwip_sanity_check: WARNING: TCP_SNDQUEUELOWAT must be less than TCP_SND_QUEUELEN. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
|
#error "lwip_sanity_check: WARNING: TCP_SNDQUEUELOWAT must be less than TCP_SND_QUEUELEN. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error."
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -1532,6 +1532,12 @@ tcp_alloc(u8_t prio)
|
|||||||
}
|
}
|
||||||
if (pcb != NULL) {
|
if (pcb != NULL) {
|
||||||
memset(pcb, 0, sizeof(struct tcp_pcb));
|
memset(pcb, 0, sizeof(struct tcp_pcb));
|
||||||
|
|
||||||
|
#if ESP_PER_SOC_TCP_WND
|
||||||
|
pcb->per_soc_tcp_wnd = TCP_WND_DEFAULT;
|
||||||
|
pcb->per_soc_tcp_snd_buf = TCP_SND_BUF_DEFAULT;
|
||||||
|
#endif
|
||||||
|
|
||||||
pcb->prio = prio;
|
pcb->prio = prio;
|
||||||
pcb->snd_buf = TCP_SND_BUF_DEFAULT;
|
pcb->snd_buf = TCP_SND_BUF_DEFAULT;
|
||||||
pcb->snd_queuelen = 0;
|
pcb->snd_queuelen = 0;
|
||||||
@ -1575,11 +1581,6 @@ tcp_alloc(u8_t prio)
|
|||||||
#endif /* LWIP_TCP_KEEPALIVE */
|
#endif /* LWIP_TCP_KEEPALIVE */
|
||||||
|
|
||||||
pcb->keep_cnt_sent = 0;
|
pcb->keep_cnt_sent = 0;
|
||||||
|
|
||||||
#if ESP_PER_SOC_TCP_WND
|
|
||||||
pcb->per_soc_tcp_wnd = TCP_WND_DEFAULT;
|
|
||||||
pcb->per_soc_tcp_snd_buf = TCP_SND_BUF_DEFAULT;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return pcb;
|
return pcb;
|
||||||
|
@ -1320,9 +1320,9 @@ tcp_rst(u32_t seqno, u32_t ackno,
|
|||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#if LWIP_WND_SCALE
|
#if LWIP_WND_SCALE
|
||||||
tcphdr->wnd = PP_HTONS(((TCP_WND >> TCP_RCV_SCALE) & 0xFFFF));
|
tcphdr->wnd = PP_HTONS(((TCP_WND_DEFAULT >> TCP_RCV_SCALE) & 0xFFFF));
|
||||||
#else
|
#else
|
||||||
tcphdr->wnd = PP_HTONS(TCP_WND);
|
tcphdr->wnd = PP_HTONS(TCP_WND_DEFAULT);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
tcphdr->chksum = 0;
|
tcphdr->chksum = 0;
|
||||||
|
@ -240,26 +240,6 @@ extern unsigned long os_random(void);
|
|||||||
---------- TCP options ----------
|
---------- TCP options ----------
|
||||||
---------------------------------
|
---------------------------------
|
||||||
*/
|
*/
|
||||||
/**
|
|
||||||
* TCP_WND: The size of a TCP window. This must be at least
|
|
||||||
* (2 * TCP_MSS) for things to work well
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define ESP_PER_SOC_TCP_WND 1
|
|
||||||
#if ESP_PER_SOC_TCP_WND
|
|
||||||
#define TCP_WND_DEFAULT (4*TCP_MSS)
|
|
||||||
#define TCP_SND_BUF_DEFAULT (2*TCP_MSS)
|
|
||||||
|
|
||||||
#define TCP_WND(pcb) (pcb->per_soc_tcp_wnd)
|
|
||||||
#define TCP_SND_BUF(pcb) (pcb->per_soc_tcp_snd_buf)
|
|
||||||
#else
|
|
||||||
#ifdef PERF
|
|
||||||
extern unsigned char misc_prof_get_tcpw(void);
|
|
||||||
extern unsigned char misc_prof_get_tcp_snd_buf(void);
|
|
||||||
#define TCP_WND(pcb) (misc_prof_get_tcpw()*TCP_MSS)
|
|
||||||
#define TCP_SND_BUF(pcb) (misc_prof_get_tcp_snd_buf()*TCP_MSS)
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -544,9 +524,10 @@ extern unsigned char misc_prof_get_tcp_snd_buf(void);
|
|||||||
#define ESP_LIGHT_SLEEP 1
|
#define ESP_LIGHT_SLEEP 1
|
||||||
|
|
||||||
|
|
||||||
#if ESP_PER_SOC_TCP_WND
|
|
||||||
#define TCP_WND_DEFAULT (4*TCP_MSS)
|
#define TCP_WND_DEFAULT (4*TCP_MSS)
|
||||||
#define TCP_SND_BUF_DEFAULT (2*TCP_MSS)
|
#define TCP_SND_BUF_DEFAULT (2*TCP_MSS)
|
||||||
|
|
||||||
|
#if ESP_PER_SOC_TCP_WND
|
||||||
#define TCP_WND(pcb) (pcb->per_soc_tcp_wnd)
|
#define TCP_WND(pcb) (pcb->per_soc_tcp_wnd)
|
||||||
#define TCP_SND_BUF(pcb) (pcb->per_soc_tcp_snd_buf)
|
#define TCP_SND_BUF(pcb) (pcb->per_soc_tcp_snd_buf)
|
||||||
#else
|
#else
|
||||||
|
Loading…
Reference in New Issue
Block a user