[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lwip-users] processing Fast retransmit bag
From: |
Oleg Tychev |
Subject: |
[lwip-users] processing Fast retransmit bag |
Date: |
Wed, 21 Jun 2006 18:38:36 +0200 |
User-agent: |
Thunderbird 1.5.0.4 (Windows/20060516) |
Hello All!
My hub have found another bug:)
For example we have two node.
Data are sent in both destination.
node1 node2(lwip)
[data1]--->
<---[data2] (1 byte/sec)
ACK
<---[data3]
data3 packet is dropped
dup ACK 1->
pcb->dupacks==1
dup ACK 2->
<---[data4]
pcb->dupacks==2
dup ACK 3->
pcb->dupacks==3
Node2 starts Fast Retransmission
see tcp_receive
if (!(pcb->flags & TF_INFR)) {
pcb->flags |= TF_INFR;
tcp_rexmit(pcb);
}
<---data3
data3 packet is dropped again
node1 sends dup ACKs again and again
but we have TF_INFR flag set, it means no tcp_rexmit!!!
We doesn't have retrasmission timeout too, because data are sent in both
destination.
You can use this patch, but I don't now how behaves fast recovery and
slow start with it.
At least it works:)
Poka poka,
Oleg
Here is patch against version lwip-1.1.1:
*** lwip-1.1.1/src/core/1/tcp_in.c Wed Mar 1 16:53:42 2006
--- lwip-1.1.1/src/core/2/tcp_in.c Wed Jun 21 18:13:18 2006
***************
*** 683,688 ****
--- 683,691 ----
if ((u16_t)(pcb->cwnd + pcb->mss) > pcb->cwnd) {
pcb->cwnd += pcb->mss;
}
+ if ((pcb->dupacks % 3) == 0) {
+ pcb->flags &= ~TF_INFR;
+ }
}
}
} else {
*** lwip-1.1.1/src/core/1/tcp_in.c Wed Mar 1 16:53:42 2006
--- lwip-1.1.1/src/core/2/tcp_in.c Wed Jun 21 18:13:18 2006
***************
*** 683,688 ****
--- 683,691 ----
if ((u16_t)(pcb->cwnd + pcb->mss) > pcb->cwnd) {
pcb->cwnd += pcb->mss;
}
+ if ((pcb->dupacks % 3) == 0) {
+ pcb->flags &= ~TF_INFR;
+ }
}
}
} else {
- [lwip-users] processing Fast retransmit bag,
Oleg Tychev <=