mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-20 21:51:05 +00:00
tcp: simpler NewReno implementation
This is a rewrite of NewReno loss recovery implementation that is simpler and standalone for readability and better performance by using less states. Note that NewReno refers to RFC6582 as a modification to the fast recovery algorithm. It is used only if the connection does not support SACK in Linux. It should not to be confused with the Reno (AIMD) congestion control. Signed-off-by: Yuchung Cheng <ycheng@google.com> Signed-off-by: Neal Cardwell <ncardwell@google.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Soheil Hassas Yeganeh <soheil@google.com> Reviewed-by: Priyaranjan Jha <priyarjha@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b38a51fec1
commit
6ac06ecd3a
3 changed files with 39 additions and 8 deletions
|
@ -216,3 +216,30 @@ void tcp_rack_update_reo_wnd(struct sock *sk, struct rate_sample *rs)
|
|||
tp->rack.reo_wnd_steps = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* RFC6582 NewReno recovery for non-SACK connection. It simply retransmits
|
||||
* the next unacked packet upon receiving
|
||||
* a) three or more DUPACKs to start the fast recovery
|
||||
* b) an ACK acknowledging new data during the fast recovery.
|
||||
*/
|
||||
void tcp_newreno_mark_lost(struct sock *sk, bool snd_una_advanced)
|
||||
{
|
||||
const u8 state = inet_csk(sk)->icsk_ca_state;
|
||||
struct tcp_sock *tp = tcp_sk(sk);
|
||||
|
||||
if ((state < TCP_CA_Recovery && tp->sacked_out >= tp->reordering) ||
|
||||
(state == TCP_CA_Recovery && snd_una_advanced)) {
|
||||
struct sk_buff *skb = tcp_rtx_queue_head(sk);
|
||||
u32 mss;
|
||||
|
||||
if (TCP_SKB_CB(skb)->sacked & TCPCB_LOST)
|
||||
return;
|
||||
|
||||
mss = tcp_skb_mss(skb);
|
||||
if (tcp_skb_pcount(skb) > 1 && skb->len > mss)
|
||||
tcp_fragment(sk, TCP_FRAG_IN_RTX_QUEUE, skb,
|
||||
mss, mss, GFP_ATOMIC);
|
||||
|
||||
tcp_skb_mark_lost_uncond_verify(tp, skb);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue