Changeset View
Changeset View
Standalone View
Standalone View
sys/netinet/tcp_output.c
Show First 20 Lines • Show All 1,228 Lines • ▼ Show 20 Lines | if (sack_rxmit == 0) { | ||||
if (len || (flags & (TH_SYN|TH_FIN)) || | if (len || (flags & (TH_SYN|TH_FIN)) || | ||||
tcp_timer_active(tp, TT_PERSIST)) | tcp_timer_active(tp, TT_PERSIST)) | ||||
th->th_seq = htonl(tp->snd_nxt); | th->th_seq = htonl(tp->snd_nxt); | ||||
else | else | ||||
th->th_seq = htonl(tp->snd_max); | th->th_seq = htonl(tp->snd_max); | ||||
} else { | } else { | ||||
th->th_seq = htonl(p->rxmit); | th->th_seq = htonl(p->rxmit); | ||||
p->rxmit += len; | p->rxmit += len; | ||||
/* | |||||
* Lost Retransmission Detection | |||||
* trigger resending of a (then | |||||
* still existing) hole, when | |||||
* fack acks recoverypoint. | |||||
*/ | |||||
if (SEQ_GEQ(p->rxmit, p->end)) | |||||
p->rxmit = tp->snd_recover; | |||||
tp->sackhint.sack_bytes_rexmit += len; | tp->sackhint.sack_bytes_rexmit += len; | ||||
} | } | ||||
th->th_ack = htonl(tp->rcv_nxt); | th->th_ack = htonl(tp->rcv_nxt); | ||||
if (optlen) { | if (optlen) { | ||||
bcopy(opt, th + 1, optlen); | bcopy(opt, th + 1, optlen); | ||||
th->th_off = (sizeof (struct tcphdr) + optlen) >> 2; | th->th_off = (sizeof (struct tcphdr) + optlen) >> 2; | ||||
} | } | ||||
th->th_flags = flags; | th->th_flags = flags; | ||||
▲ Show 20 Lines • Show All 880 Lines • Show Last 20 Lines |