601 |
struct pbuf *p; |
struct pbuf *p; |
602 |
s32_t off; |
s32_t off; |
603 |
int m; |
int m; |
604 |
|
u32_t right_wnd_edge; |
605 |
|
|
606 |
|
|
607 |
if(flags & TCP_ACK) { |
if(flags & TCP_ACK) { |
608 |
unsigned long int right_wnd_edge = pcb->snd_wnd + pcb->snd_wl1; |
right_wnd_edge = pcb->snd_wnd + pcb->snd_wl1; |
609 |
|
|
610 |
/* Update window. */ |
/* Update window. */ |
611 |
if(TCP_SEQ_LT(pcb->snd_wl1, seqno) || |
if(TCP_SEQ_LT(pcb->snd_wl1, seqno) || |
626 |
|
|
627 |
|
|
628 |
if(pcb->lastack == ackno) { |
if(pcb->lastack == ackno) { |
629 |
if(pcb->snd_wl1+pcb->snd_wnd==right_wnd_edge){ |
if(pcb->snd_wl1 + pcb->snd_wnd == right_wnd_edge){ |
630 |
++pcb->dupacks; |
++pcb->dupacks; |
631 |
if(pcb->dupacks >= 3 && pcb->unacked != NULL) { |
if(pcb->dupacks >= 3 && pcb->unacked != NULL) { |
632 |
if(!(pcb->flags & TF_INFR)) { |
if(!(pcb->flags & TF_INFR)) { |
650 |
} |
} |
651 |
} |
} |
652 |
} |
} |
653 |
} |
} else { |
654 |
else{ |
DEBUGF(TCP_FR_DEBUG, ("tcp_receive: dupack averted %lu %lu\n", |
655 |
DEBUGF(TCP_FR_DEBUG, ("tcp_receive: dupack averted %lu %lu\n", pcb->snd_wl1+pcb->snd_wnd, right_wnd_edge)); |
pcb->snd_wl1 + pcb->snd_wnd, right_wnd_edge)); |
656 |
} |
} |
657 |
} else if(TCP_SEQ_LT(pcb->lastack, ackno) && |
} else if(TCP_SEQ_LT(pcb->lastack, ackno) && |
658 |
TCP_SEQ_LEQ(ackno, pcb->snd_max)) { |
TCP_SEQ_LEQ(ackno, pcb->snd_max)) { |