Changeset View
Changeset View
Standalone View
Standalone View
sys/netinet/tcp_stacks/rack.c
Context not available. | |||||
} | } | ||||
#endif | #endif | ||||
static void | static int | ||||
rack_note_dsack(struct tcp_rack *rack, tcp_seq start, tcp_seq end) | rack_note_dsack(struct tcp_rack *rack, tcp_seq start, tcp_seq end) | ||||
{ | { | ||||
uint32_t am, l_end; | uint32_t am, l_end; | ||||
int was_tlp = 0; | |||||
if (SEQ_GT(end, start)) | if (SEQ_GT(end, start)) | ||||
am = end - start; | am = end - start; | ||||
Context not available. | |||||
* our previous retransmit TLP. | * our previous retransmit TLP. | ||||
*/ | */ | ||||
rack_log_dsack_event(rack, 7, __LINE__, start, end); | rack_log_dsack_event(rack, 7, __LINE__, start, end); | ||||
was_tlp = 1; | |||||
goto skip_dsack_round; | goto skip_dsack_round; | ||||
} | } | ||||
if (rack->rc_last_sent_tlp_seq_valid) { | if (rack->rc_last_sent_tlp_seq_valid) { | ||||
Context not available. | |||||
* for reordering purposes. | * for reordering purposes. | ||||
*/ | */ | ||||
rack_log_dsack_event(rack, 7, __LINE__, start, end); | rack_log_dsack_event(rack, 7, __LINE__, start, end); | ||||
was_tlp = 1; | |||||
goto skip_dsack_round; | goto skip_dsack_round; | ||||
} | } | ||||
} | } | ||||
Context not available. | |||||
rack->r_ctl.retran_during_recovery = 0; | rack->r_ctl.retran_during_recovery = 0; | ||||
rack->r_ctl.dsack_byte_cnt = 0; | rack->r_ctl.dsack_byte_cnt = 0; | ||||
} | } | ||||
return (was_tlp); | |||||
} | } | ||||
static void | static void | ||||
Context not available. | |||||
num_sack_blks++; | num_sack_blks++; | ||||
} else if (SEQ_LEQ(sack.start, th_ack) && | } else if (SEQ_LEQ(sack.start, th_ack) && | ||||
SEQ_LEQ(sack.end, th_ack)) { | SEQ_LEQ(sack.end, th_ack)) { | ||||
#ifdef NETFLIX_STATS | int was_tlp; | ||||
was_tlp = rack_note_dsack(rack, sack.start, sack.end); | |||||
/* | /* | ||||
* Its a D-SACK block. | * Its a D-SACK block. | ||||
*/ | */ | ||||
tcp_record_dsack(sack.start, sack.end); | tcp_record_dsack(tp, sack.start, sack.end, was_tlp); | ||||
#endif | |||||
rack_note_dsack(rack, sack.start, sack.end); | |||||
} | } | ||||
} | } | ||||
if (rack->rc_dsack_round_seen) { | if (rack->rc_dsack_round_seen) { | ||||
Context not available. |