kopia lustrzana https://github.com/espressif/esp-idf
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 !160pull/42/merge
commit
c7f8d206ed
|
@ -135,7 +135,7 @@
|
|||
//#endif
|
||||
#else /* LWIP_WND_SCALE */
|
||||
|
||||
#if (ESP_PER_SOC_TCP_WND == 0)
|
||||
#if ! ESP_PER_SOC_TCP_WND
|
||||
#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)"
|
||||
#endif
|
||||
|
@ -143,11 +143,11 @@
|
|||
|
||||
#endif /* LWIP_WND_SCALE */
|
||||
|
||||
#if (ESP_PER_SOC_TCP_WND == 0)
|
||||
#if (LWIP_TCP && (TCP_SND_QUEUELEN > 0xffff))
|
||||
#if ! ESP_PER_SOC_TCP_WND
|
||||
#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"
|
||||
#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"
|
||||
#endif
|
||||
|
||||
|
@ -286,25 +286,25 @@
|
|||
|
||||
/* TCP sanity checks */
|
||||
#if !LWIP_DISABLE_TCP_SANITY_CHECKS
|
||||
#if ! ESP_PER_SOC_TCP_WND
|
||||
#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."
|
||||
#endif
|
||||
|
||||
#if (ESP_PER_SOC_TCP_WND == 0)
|
||||
#if TCP_SND_BUF < (2 * TCP_MSS)
|
||||
#if TCP_SND_BUF(0) < (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."
|
||||
#endif
|
||||
#if TCP_SND_QUEUELEN < (2 * (TCP_SND_BUF / 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."
|
||||
#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(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
|
||||
#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."
|
||||
#endif
|
||||
#if TCP_SNDLOWAT >= (0xFFFF - (4 * TCP_MSS))
|
||||
#error "lwip_sanity_check: WARNING: TCP_SNDLOWAT must at least be 4*MSS below u16_t overflow!"
|
||||
#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."
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -1532,6 +1532,12 @@ tcp_alloc(u8_t prio)
|
|||
}
|
||||
if (pcb != NULL) {
|
||||
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->snd_buf = TCP_SND_BUF_DEFAULT;
|
||||
pcb->snd_queuelen = 0;
|
||||
|
@ -1575,11 +1581,6 @@ tcp_alloc(u8_t prio)
|
|||
#endif /* LWIP_TCP_KEEPALIVE */
|
||||
|
||||
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;
|
||||
|
|
|
@ -1320,9 +1320,9 @@ tcp_rst(u32_t seqno, u32_t ackno,
|
|||
#endif
|
||||
#else
|
||||
#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
|
||||
tcphdr->wnd = PP_HTONS(TCP_WND);
|
||||
tcphdr->wnd = PP_HTONS(TCP_WND_DEFAULT);
|
||||
#endif
|
||||
#endif
|
||||
tcphdr->chksum = 0;
|
||||
|
|
|
@ -240,26 +240,6 @@ extern unsigned long os_random(void);
|
|||
---------- 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
|
||||
|
||||
|
||||
#if ESP_PER_SOC_TCP_WND
|
||||
#define TCP_WND_DEFAULT (4*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_SND_BUF(pcb) (pcb->per_soc_tcp_snd_buf)
|
||||
#else
|
||||
|
|
Ładowanie…
Reference in New Issue