File tree Expand file tree Collapse file tree 3 files changed +14
-7
lines changed Expand file tree Collapse file tree 3 files changed +14
-7
lines changed Original file line number Diff line number Diff line change @@ -1879,6 +1879,8 @@ void tcp_init(void);
1879
1879
/* tcp_recovery.c */
1880
1880
void tcp_mark_skb_lost (struct sock * sk , struct sk_buff * skb );
1881
1881
void tcp_newreno_mark_lost (struct sock * sk , bool snd_una_advanced );
1882
+ extern s32 tcp_rack_skb_timeout (struct tcp_sock * tp , struct sk_buff * skb ,
1883
+ u32 reo_wnd );
1882
1884
extern void tcp_rack_mark_lost (struct sock * sk );
1883
1885
extern void tcp_rack_advance (struct tcp_sock * tp , u8 sacked , u32 end_seq ,
1884
1886
u64 xmit_time );
Original file line number Diff line number Diff line change @@ -1917,6 +1917,11 @@ static inline void tcp_init_undo(struct tcp_sock *tp)
1917
1917
tp -> undo_retrans = tp -> retrans_out ? : -1 ;
1918
1918
}
1919
1919
1920
+ static bool tcp_is_rack (const struct sock * sk )
1921
+ {
1922
+ return sock_net (sk )-> ipv4 .sysctl_tcp_recovery & TCP_RACK_LOSS_DETECTION ;
1923
+ }
1924
+
1920
1925
/* If we detect SACK reneging, forget all SACK information
1921
1926
* and reset tags completely, otherwise preserve SACKs. If receiver
1922
1927
* dropped its ofo queue, we will know this due to reneging detection.
@@ -2031,11 +2036,6 @@ static inline int tcp_dupack_heuristics(const struct tcp_sock *tp)
2031
2036
return tp -> sacked_out + 1 ;
2032
2037
}
2033
2038
2034
- static bool tcp_is_rack (const struct sock * sk )
2035
- {
2036
- return sock_net (sk )-> ipv4 .sysctl_tcp_recovery & TCP_RACK_LOSS_DETECTION ;
2037
- }
2038
-
2039
2039
/* Linux NewReno/SACK/ECN state machine.
2040
2040
* --------------------------------------
2041
2041
*
Original file line number Diff line number Diff line change @@ -47,6 +47,12 @@ u32 tcp_rack_reo_wnd(const struct sock *sk)
47
47
tp -> srtt_us >> 3 );
48
48
}
49
49
50
+ s32 tcp_rack_skb_timeout (struct tcp_sock * tp , struct sk_buff * skb , u32 reo_wnd )
51
+ {
52
+ return tp -> rack .rtt_us + reo_wnd -
53
+ tcp_stamp_us_delta (tp -> tcp_mstamp , skb -> skb_mstamp );
54
+ }
55
+
50
56
/* RACK loss detection (IETF draft draft-ietf-tcpm-rack-01):
51
57
*
52
58
* Marks a packet lost, if some packet sent later has been (s)acked.
@@ -92,8 +98,7 @@ static void tcp_rack_detect_loss(struct sock *sk, u32 *reo_timeout)
92
98
/* A packet is lost if it has not been s/acked beyond
93
99
* the recent RTT plus the reordering window.
94
100
*/
95
- remaining = tp -> rack .rtt_us + reo_wnd -
96
- tcp_stamp_us_delta (tp -> tcp_mstamp , skb -> skb_mstamp );
101
+ remaining = tcp_rack_skb_timeout (tp , skb , reo_wnd );
97
102
if (remaining <= 0 ) {
98
103
tcp_mark_skb_lost (sk , skb );
99
104
list_del_init (& skb -> tcp_tsorted_anchor );
You can’t perform that action at this time.
0 commit comments