aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/tcp.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net/tcp.h')
-rw-r--r--include/net/tcp.h29
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
349extern 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 */
476static inline int tcp_bound_to_half_wnd(struct tcp_sock *tp, int pktsize) 474static 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 */
808static inline u32 rfc3390_bytes_to_packets(const u32 smss)
809{
810 return smss <= 1095 ? 4 : (smss > 2190 ? 2 : 3);
811}
812
792extern void tcp_enter_cwr(struct sock *sk, const int set_ssthresh); 813extern void tcp_enter_cwr(struct sock *sk, const int set_ssthresh);
793extern __u32 tcp_init_cwnd(struct tcp_sock *tp, struct dst_entry *dst); 814extern __u32 tcp_init_cwnd(struct tcp_sock *tp, struct dst_entry *dst);
794 815