diff options
Diffstat (limited to 'include/net/tcp.h')
-rw-r--r-- | include/net/tcp.h | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/include/net/tcp.h b/include/net/tcp.h index eaa9582779d0..4fee0424af7e 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h | |||
@@ -346,8 +346,6 @@ static inline void tcp_dec_quickack_mode(struct sock *sk, | |||
346 | } | 346 | } |
347 | } | 347 | } |
348 | 348 | ||
349 | extern void tcp_enter_quickack_mode(struct sock *sk); | ||
350 | |||
351 | #define TCP_ECN_OK 1 | 349 | #define TCP_ECN_OK 1 |
352 | #define TCP_ECN_QUEUE_CWR 2 | 350 | #define TCP_ECN_QUEUE_CWR 2 |
353 | #define TCP_ECN_DEMAND_CWR 4 | 351 | #define TCP_ECN_DEMAND_CWR 4 |
@@ -475,8 +473,22 @@ extern unsigned int tcp_current_mss(struct sock *sk); | |||
475 | /* Bound MSS / TSO packet size with the half of the window */ | 473 | /* Bound MSS / TSO packet size with the half of the window */ |
476 | static inline int tcp_bound_to_half_wnd(struct tcp_sock *tp, int pktsize) | 474 | static inline int tcp_bound_to_half_wnd(struct tcp_sock *tp, int pktsize) |
477 | { | 475 | { |
478 | if (tp->max_window && pktsize > (tp->max_window >> 1)) | 476 | int cutoff; |
479 | return max(tp->max_window >> 1, 68U - tp->tcp_header_len); | 477 | |
478 | /* When peer uses tiny windows, there is no use in packetizing | ||
479 | * to sub-MSS pieces for the sake of SWS or making sure there | ||
480 | * are enough packets in the pipe for fast recovery. | ||
481 | * | ||
482 | * On the other hand, for extremely large MSS devices, handling | ||
483 | * smaller than MSS windows in this way does make sense. | ||
484 | */ | ||
485 | if (tp->max_window >= 512) | ||
486 | cutoff = (tp->max_window >> 1); | ||
487 | else | ||
488 | cutoff = tp->max_window; | ||
489 | |||
490 | if (cutoff && pktsize > cutoff) | ||
491 | return max_t(int, cutoff, 68U - tp->tcp_header_len); | ||
480 | else | 492 | else |
481 | return pktsize; | 493 | return pktsize; |
482 | } | 494 | } |
@@ -789,6 +801,15 @@ static inline __u32 tcp_current_ssthresh(const struct sock *sk) | |||
789 | /* Use define here intentionally to get WARN_ON location shown at the caller */ | 801 | /* Use define here intentionally to get WARN_ON location shown at the caller */ |
790 | #define tcp_verify_left_out(tp) WARN_ON(tcp_left_out(tp) > tp->packets_out) | 802 | #define tcp_verify_left_out(tp) WARN_ON(tcp_left_out(tp) > tp->packets_out) |
791 | 803 | ||
804 | /* | ||
805 | * Convert RFC 3390 larger initial window into an equivalent number of packets. | ||
806 | * This is based on the numbers specified in RFC 5681, 3.1. | ||
807 | */ | ||
808 | static inline u32 rfc3390_bytes_to_packets(const u32 smss) | ||
809 | { | ||
810 | return smss <= 1095 ? 4 : (smss > 2190 ? 2 : 3); | ||
811 | } | ||
812 | |||
792 | extern void tcp_enter_cwr(struct sock *sk, const int set_ssthresh); | 813 | extern void tcp_enter_cwr(struct sock *sk, const int set_ssthresh); |
793 | extern __u32 tcp_init_cwnd(struct tcp_sock *tp, struct dst_entry *dst); | 814 | extern __u32 tcp_init_cwnd(struct tcp_sock *tp, struct dst_entry *dst); |
794 | 815 | ||