Changeset View
Changeset View
Standalone View
Standalone View
sys/netinet/tcp_stacks/rack.c
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
Show First 20 Lines • Show All 1,781 Lines • ▼ Show 20 Lines | if (todrop > tlen | ||||
tp->t_flags |= TF_ACKNOW; | tp->t_flags |= TF_ACKNOW; | ||||
todrop = tlen; | todrop = tlen; | ||||
TCPSTAT_INC(tcps_rcvduppack); | TCPSTAT_INC(tcps_rcvduppack); | ||||
TCPSTAT_ADD(tcps_rcvdupbyte, todrop); | TCPSTAT_ADD(tcps_rcvdupbyte, todrop); | ||||
} else { | } else { | ||||
TCPSTAT_INC(tcps_rcvpartduppack); | TCPSTAT_INC(tcps_rcvpartduppack); | ||||
TCPSTAT_ADD(tcps_rcvpartdupbyte, todrop); | TCPSTAT_ADD(tcps_rcvpartdupbyte, todrop); | ||||
} | } | ||||
if (tp->t_flags & TF_SACK_PERMIT) { | |||||
rrs: This block may be a duplicate of whats in rack_bbr_common.c
Please look in that file to verify. | |||||
Done Inline ActionsThere is no rack_bbr_common.c in the upstream (yet). Only the header file, which doesn't contain any code. Shall I add a comment that this needs to be checked once bbr is merged to upstream? rscheff: There is no rack_bbr_common.c in the upstream (yet). Only the header file, which doesn't… | |||||
Done Inline ActionsI think is it in head: rack_bbr_common.c. tuexen: I think is it in head: [[ https://svnweb.freebsd. | |||||
/* | |||||
* record the left, to-be-dropped edge of data | |||||
* here, for use as dsack block further down | |||||
*/ | |||||
tcp_update_sack_list(tp, th->th_seq, | |||||
th->th_seq + todrop); | |||||
} | |||||
*drop_hdrlen += todrop; /* drop from the top afterwards */ | *drop_hdrlen += todrop; /* drop from the top afterwards */ | ||||
th->th_seq += todrop; | th->th_seq += todrop; | ||||
tlen -= todrop; | tlen -= todrop; | ||||
if (th->th_urp > todrop) | if (th->th_urp > todrop) | ||||
th->th_urp -= todrop; | th->th_urp -= todrop; | ||||
else { | else { | ||||
thflags &= ~TH_URG; | thflags &= ~TH_URG; | ||||
th->th_urp = 0; | th->th_urp = 0; | ||||
▲ Show 20 Lines • Show All 3,141 Lines • ▼ Show 20 Lines | if (((tlen == 0) && (save_tlen > 0) && | ||||
* above. | * above. | ||||
*/ | */ | ||||
tcp_update_sack_list(tp, save_start, save_start + save_tlen); | tcp_update_sack_list(tp, save_start, save_start + save_tlen); | ||||
} else if ((tlen > 0) && SEQ_GT(tp->rcv_nxt, save_rnxt)) { | } else if ((tlen > 0) && SEQ_GT(tp->rcv_nxt, save_rnxt)) { | ||||
/* | /* | ||||
* Cleaning sackblks by using zero length | * Cleaning sackblks by using zero length | ||||
* update. | * update. | ||||
*/ | */ | ||||
tcp_update_sack_list(tp, save_start, save_start); | if ((tp->rcv_numsacks >= 1) && | ||||
(tp->sackblks[0].end == save_start)) { | |||||
/* partial overlap, recorded at todrop above */ | |||||
tcp_update_sack_list(tp, tp->sackblks[0].start, | |||||
tp->sackblks[0].end); | |||||
} else { | |||||
tcp_update_dsack_list(tp, save_start, | |||||
save_start + save_tlen); | |||||
} | |||||
} else if ((tlen > 0) && (tlen >= save_tlen)) { | } else if ((tlen > 0) && (tlen >= save_tlen)) { | ||||
/* Update of sackblks. */ | /* Update of sackblks. */ | ||||
tcp_update_sack_list(tp, save_start, save_start + save_tlen); | tcp_update_dsack_list(tp, save_start, | ||||
save_start + save_tlen); | |||||
} else if (tlen > 0) { | } else if (tlen > 0) { | ||||
tcp_update_sack_list(tp, save_start, save_start+tlen); | tcp_update_dsack_list(tp, save_start, | ||||
save_start + tlen); | |||||
} | } | ||||
} else { | } else { | ||||
m_freem(m); | m_freem(m); | ||||
thflags &= ~TH_FIN; | thflags &= ~TH_FIN; | ||||
} | } | ||||
/* | /* | ||||
* If FIN is received ACK the FIN and let the user know that the | * If FIN is received ACK the FIN and let the user know that the | ||||
▲ Show 20 Lines • Show All 4,254 Lines • Show Last 20 Lines |
This block may be a duplicate of whats in rack_bbr_common.c
Please look in that file to verify.
R