mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-07 06:34:34 +02:00
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.
This commit is contained in:
@@ -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
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user