tcp: mark lost first sack hole on timeout
Type: improvement Signed-off-by: Florin Coras <fcoras@cisco.com> Change-Id: I1abff943f3fe3ff0219126b5b8beded4ad859758
This commit is contained in:

committed by
Dave Barach

parent
8e1ada3a61
commit
ed5be47009
@ -1337,7 +1337,10 @@ tcp_timer_retransmit_handler (tcp_connection_t * tc)
|
||||
}
|
||||
|
||||
if (tcp_opts_sack_permitted (&tc->rcv_opts))
|
||||
tcp_check_sack_reneging (tc);
|
||||
{
|
||||
tcp_check_sack_reneging (tc);
|
||||
scoreboard_rxt_mark_lost (&tc->sack_sb, tc->snd_una, tc->snd_nxt);
|
||||
}
|
||||
|
||||
/* Update send congestion to make sure that rxt has data to send */
|
||||
tc->snd_congestion = tc->snd_nxt;
|
||||
|
@ -264,6 +264,27 @@ scoreboard_init_rxt (sack_scoreboard_t * sb, u32 snd_una)
|
||||
sb->rescue_rxt = snd_una - 1;
|
||||
}
|
||||
|
||||
void
|
||||
scoreboard_rxt_mark_lost (sack_scoreboard_t *sb, u32 snd_una, u32 snd_nxt)
|
||||
{
|
||||
sack_scoreboard_hole_t *hole;
|
||||
|
||||
hole = scoreboard_first_hole (sb);
|
||||
if (!hole)
|
||||
{
|
||||
hole = scoreboard_insert_hole (sb, TCP_INVALID_SACK_HOLE_INDEX, snd_una,
|
||||
snd_nxt);
|
||||
sb->tail = scoreboard_hole_index (sb, hole);
|
||||
sb->high_sacked = snd_una;
|
||||
}
|
||||
|
||||
if (hole->is_lost)
|
||||
return;
|
||||
|
||||
hole->is_lost = 1;
|
||||
sb->lost_bytes += scoreboard_hole_bytes (hole);
|
||||
}
|
||||
|
||||
void
|
||||
scoreboard_init (sack_scoreboard_t * sb)
|
||||
{
|
||||
|
@ -105,6 +105,8 @@ void scoreboard_clear (sack_scoreboard_t * sb);
|
||||
void scoreboard_clear_reneging (sack_scoreboard_t * sb, u32 start, u32 end);
|
||||
void scoreboard_init (sack_scoreboard_t * sb);
|
||||
void scoreboard_init_rxt (sack_scoreboard_t * sb, u32 snd_una);
|
||||
void scoreboard_rxt_mark_lost (sack_scoreboard_t *sb, u32 snd_una,
|
||||
u32 snd_nxt);
|
||||
|
||||
format_function_t format_tcp_scoreboard;
|
||||
|
||||
|
Reference in New Issue
Block a user