Dear all
I have observed while testing with windows client that some times on retransmission of packets from window the window advertises smaller window .
In that case
lwip does not update its snd_wnd which ultimately leads to more data sent by lwip than the advertised window by windows .The window discrads the extra data ,which does not fit in its window ,and ask lwip to send this lost data again as soon its window opens. But some times this demanded sequence number does not lie on segment boundary . Lwip resend a segement which contains that sequence somewhere in middle ,as lwip cannot fragment that segment to send the exact sequence , but windows keep on insisting for exact sequence .In that case the deadlock is created and ultimately the connection gets stuck .
The check that seems responsible for this is in tcp_in.c in function tcp_receive
if (TCP_SEQ_LT(pcb->snd_wl1,
seqno) ||
(pcb->snd_wl1 == seqno && TCP_SEQ_LT(pcb->snd_wl2, ackno)) ||
(pcb->snd_wl2 == ackno && seg->tcphdr->wnd > pcb->snd_wnd))
{
pcb->snd_wnd = seg->tcphdr->wnd;
pcb->snd_wl1 = seqno;
pcb->snd_wl2 = ackno;
The if check is failed for retransmitted received packets with a smaller advertised window causing a no window update and causing a dead lock.
This problem may be solved if we add a new check before this check like
if(seg->tcphdr->wnd < pcb->snd_wnd)
pcb->snd_wnd = seg->tcphdr->wnd;
This new if sets the snd_wnd whenever any small window is advertised
Any one comment please
Best Regards
Mumtaz Ahmad
Manager Network Systems Group
SN Pakistan
92-52-3335228327
_______________________________________________
lwip-users mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/lwip-users
Send free SMS to your Friends on Mobile from your Yahoo! Messenger. Download Now! http://messenger.yahoo.com/download.php