diff options
Diffstat (limited to 'include/net/tcp.h')
| -rw-r--r-- | include/net/tcp.h | 42 | 
1 files changed, 31 insertions, 11 deletions
diff --git a/include/net/tcp.h b/include/net/tcp.h index 0ca972ebd3dd..91688d0dadcd 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -45,7 +45,6 @@  #include <linux/memcontrol.h>  #include <linux/bpf-cgroup.h>  #include <linux/siphash.h> -#include <linux/net_mm.h>  extern struct inet_hashinfo tcp_hashinfo; @@ -323,7 +322,6 @@ int tcp_v4_early_demux(struct sk_buff *skb);  int tcp_v4_rcv(struct sk_buff *skb);  void tcp_remove_empty_skb(struct sock *sk); -int tcp_v4_tw_remember_stamp(struct inet_timewait_sock *tw);  int tcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size);  int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size);  int tcp_sendmsg_fastopen(struct sock *sk, struct msghdr *msg, int *copied, @@ -350,7 +348,6 @@ ssize_t tcp_splice_read(struct socket *sk, loff_t *ppos,  struct sk_buff *tcp_stream_alloc_skb(struct sock *sk, gfp_t gfp,  				     bool force_schedule); -void tcp_enter_quickack_mode(struct sock *sk, unsigned int max_quickacks);  static inline void tcp_dec_quickack_mode(struct sock *sk,  					 const unsigned int pkts)  { @@ -606,7 +603,6 @@ int tcp_fragment(struct sock *sk, enum tcp_queue tcp_queue,  		 unsigned int mss_now, gfp_t gfp);  void tcp_send_probe0(struct sock *); -void tcp_send_partial(struct sock *);  int tcp_write_wakeup(struct sock *, int mib);  void tcp_send_fin(struct sock *sk);  void tcp_send_active_reset(struct sock *sk, gfp_t priority); @@ -624,7 +620,6 @@ void tcp_skb_collapse_tstamp(struct sk_buff *skb,  void tcp_rearm_rto(struct sock *sk);  void tcp_synack_rtt_meas(struct sock *sk, struct request_sock *req);  void tcp_reset(struct sock *sk, struct sk_buff *skb); -void tcp_skb_mark_lost_uncond_verify(struct tcp_sock *tp, struct sk_buff *skb);  void tcp_fin(struct sock *sk);  void tcp_check_space(struct sock *sk);  void tcp_sack_compress_send_ack(struct sock *sk); @@ -1432,13 +1427,39 @@ void tcp_select_initial_window(const struct sock *sk, int __space,  			       __u32 *window_clamp, int wscale_ok,  			       __u8 *rcv_wscale, __u32 init_rcv_wnd); +static inline int __tcp_win_from_space(u8 scaling_ratio, int space) +{ +	s64 scaled_space = (s64)space * scaling_ratio; + +	return scaled_space >> TCP_RMEM_TO_WIN_SCALE; +} +  static inline int tcp_win_from_space(const struct sock *sk, int space)  { -	int tcp_adv_win_scale = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_adv_win_scale); +	return __tcp_win_from_space(tcp_sk(sk)->scaling_ratio, space); +} + +/* inverse of __tcp_win_from_space() */ +static inline int __tcp_space_from_win(u8 scaling_ratio, int win) +{ +	u64 val = (u64)win << TCP_RMEM_TO_WIN_SCALE; -	return tcp_adv_win_scale <= 0 ? -		(space>>(-tcp_adv_win_scale)) : -		space - (space>>tcp_adv_win_scale); +	do_div(val, scaling_ratio); +	return val; +} + +static inline int tcp_space_from_win(const struct sock *sk, int win) +{ +	return __tcp_space_from_win(tcp_sk(sk)->scaling_ratio, win); +} + +static inline void tcp_scaling_ratio_init(struct sock *sk) +{ +	/* Assume a conservative default of 1200 bytes of payload per 4K page. +	 * This may be adjusted later in tcp_measure_rcv_mss(). +	 */ +	tcp_sk(sk)->scaling_ratio = (1200 << TCP_RMEM_TO_WIN_SCALE) / +				    SKB_TRUESIZE(4096);  }  /* Note: caller must be prepared to deal with negative returns */ @@ -2009,7 +2030,7 @@ static inline bool inet_sk_transparent(const struct sock *sk)  	case TCP_NEW_SYN_RECV:  		return inet_rsk(inet_reqsk(sk))->no_srccheck;  	} -	return inet_sk(sk)->transparent; +	return inet_test_bit(TRANSPARENT, sk);  }  /* Determines whether this is a thin stream (which may suffer from @@ -2336,7 +2357,6 @@ struct sk_msg;  struct sk_psock;  #ifdef CONFIG_BPF_SYSCALL -struct proto *tcp_bpf_get_proto(struct sock *sk, struct sk_psock *psock);  int tcp_bpf_update_proto(struct sock *sk, struct sk_psock *psock, bool restore);  void tcp_bpf_clone(const struct sock *sk, struct sock *newsk);  #endif /* CONFIG_BPF_SYSCALL */  | 
