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 mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/lwip-users