mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2025-01-30 12:32:37 +00:00
Fix bug #20506: Slow start / initial congestion window starts with 2 * mss (instead of 1 * mss previously) to comply with some newer RFCs and other stacks.
This commit is contained in:
parent
a1d8335a8c
commit
9eff9676e9
@ -19,6 +19,11 @@ HISTORY
|
|||||||
|
|
||||||
++ New features:
|
++ New features:
|
||||||
|
|
||||||
|
2007-07-25 Simon Goldschmidt
|
||||||
|
* tcp_in.c: Fix bug #20506: Slow start / initial congestion window starts with
|
||||||
|
2 * mss (instead of 1 * mss previously) to comply with some newer RFCs and
|
||||||
|
other stacks.
|
||||||
|
|
||||||
2007-07-13 Jared Grubb (integrated by Frédéric Bernon)
|
2007-07-13 Jared Grubb (integrated by Frédéric Bernon)
|
||||||
* opt.h, netif.h, netif.c, ethernetif.c: Add new configuration option to add
|
* opt.h, netif.h, netif.c, ethernetif.c: Add new configuration option to add
|
||||||
a link callback in the netif struct, and functions to handle it. Be carefull
|
a link callback in the netif struct, and functions to handle it. Be carefull
|
||||||
|
@ -512,7 +512,7 @@ tcp_process(struct tcp_pcb *pcb)
|
|||||||
pcb->snd_wnd = tcphdr->wnd;
|
pcb->snd_wnd = tcphdr->wnd;
|
||||||
pcb->snd_wl1 = seqno - 1; /* initialise to seqno - 1 to force window update */
|
pcb->snd_wl1 = seqno - 1; /* initialise to seqno - 1 to force window update */
|
||||||
pcb->state = ESTABLISHED;
|
pcb->state = ESTABLISHED;
|
||||||
pcb->cwnd = pcb->mss;
|
pcb->cwnd = ((pcb->cwnd == 1) ? (pcb->mss * 2) : pcb->mss);
|
||||||
LWIP_ASSERT("pcb->snd_queuelen > 0", (pcb->snd_queuelen > 0));
|
LWIP_ASSERT("pcb->snd_queuelen > 0", (pcb->snd_queuelen > 0));
|
||||||
--pcb->snd_queuelen;
|
--pcb->snd_queuelen;
|
||||||
LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_process: SYN-SENT --queuelen %"U16_F"\n", (u16_t)pcb->snd_queuelen));
|
LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_process: SYN-SENT --queuelen %"U16_F"\n", (u16_t)pcb->snd_queuelen));
|
||||||
@ -548,6 +548,7 @@ tcp_process(struct tcp_pcb *pcb)
|
|||||||
!(flags & TCP_RST)) {
|
!(flags & TCP_RST)) {
|
||||||
/* expected ACK number? */
|
/* expected ACK number? */
|
||||||
if (TCP_SEQ_BETWEEN(ackno, pcb->lastack+1, pcb->snd_nxt)) {
|
if (TCP_SEQ_BETWEEN(ackno, pcb->lastack+1, pcb->snd_nxt)) {
|
||||||
|
u16_t old_cwnd;
|
||||||
pcb->state = ESTABLISHED;
|
pcb->state = ESTABLISHED;
|
||||||
LWIP_DEBUGF(TCP_DEBUG, ("TCP connection established %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest));
|
LWIP_DEBUGF(TCP_DEBUG, ("TCP connection established %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest));
|
||||||
#if LWIP_CALLBACK_API
|
#if LWIP_CALLBACK_API
|
||||||
@ -561,10 +562,11 @@ tcp_process(struct tcp_pcb *pcb)
|
|||||||
tcp_abort(pcb);
|
tcp_abort(pcb);
|
||||||
return ERR_ABRT;
|
return ERR_ABRT;
|
||||||
}
|
}
|
||||||
|
old_cwnd = pcb->cwnd;
|
||||||
/* If there was any data contained within this ACK,
|
/* If there was any data contained within this ACK,
|
||||||
* we'd better pass it on to the application as well. */
|
* we'd better pass it on to the application as well. */
|
||||||
tcp_receive(pcb);
|
tcp_receive(pcb);
|
||||||
pcb->cwnd = pcb->mss;
|
pcb->cwnd = ((old_cwnd == 1) ? (pcb->mss * 2) : pcb->mss);
|
||||||
}
|
}
|
||||||
/* incorrect ACK number */
|
/* incorrect ACK number */
|
||||||
else {
|
else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user