diff options
Diffstat (limited to 'net/ipv4/tcp_input.c')
| -rw-r--r-- | net/ipv4/tcp_input.c | 33 | 
1 files changed, 13 insertions, 20 deletions
| diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 18f97ca76b00..a759e19496d2 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -81,8 +81,6 @@ int sysctl_tcp_sack __read_mostly = 1;  int sysctl_tcp_fack __read_mostly = 1;  int sysctl_tcp_reordering __read_mostly = TCP_FASTRETRANS_THRESH;  EXPORT_SYMBOL(sysctl_tcp_reordering); -int sysctl_tcp_ecn __read_mostly = 2; -EXPORT_SYMBOL(sysctl_tcp_ecn);  int sysctl_tcp_dsack __read_mostly = 1;  int sysctl_tcp_app_win __read_mostly = 31;  int sysctl_tcp_adv_win_scale __read_mostly = 1; @@ -100,7 +98,6 @@ int sysctl_tcp_frto_response __read_mostly;  int sysctl_tcp_thin_dupack __read_mostly;  int sysctl_tcp_moderate_rcvbuf __read_mostly = 1; -int sysctl_tcp_abc __read_mostly;  int sysctl_tcp_early_retrans __read_mostly = 2;  #define FLAG_DATA		0x01 /* Incoming frame contained data.		*/ @@ -2009,7 +2006,6 @@ static void tcp_enter_frto_loss(struct sock *sk, int allowed_segments, int flag)  	tp->snd_cwnd_cnt = 0;  	tp->snd_cwnd_stamp = tcp_time_stamp;  	tp->frto_counter = 0; -	tp->bytes_acked = 0;  	tp->reordering = min_t(unsigned int, tp->reordering,  			       sysctl_tcp_reordering); @@ -2058,7 +2054,6 @@ void tcp_enter_loss(struct sock *sk, int how)  	tp->snd_cwnd_cnt   = 0;  	tp->snd_cwnd_stamp = tcp_time_stamp; -	tp->bytes_acked = 0;  	tcp_clear_retrans_partial(tp);  	if (tcp_is_reno(tp)) @@ -2686,7 +2681,6 @@ static void tcp_init_cwnd_reduction(struct sock *sk, const bool set_ssthresh)  	struct tcp_sock *tp = tcp_sk(sk);  	tp->high_seq = tp->snd_nxt; -	tp->bytes_acked = 0;  	tp->snd_cwnd_cnt = 0;  	tp->prior_cwnd = tp->snd_cwnd;  	tp->prr_delivered = 0; @@ -2737,7 +2731,6 @@ void tcp_enter_cwr(struct sock *sk, const int set_ssthresh)  	struct tcp_sock *tp = tcp_sk(sk);  	tp->prior_ssthresh = 0; -	tp->bytes_acked = 0;  	if (inet_csk(sk)->icsk_ca_state < TCP_CA_CWR) {  		tp->undo_marker = 0;  		tcp_init_cwnd_reduction(sk, set_ssthresh); @@ -3419,7 +3412,6 @@ static void tcp_conservative_spur_to_response(struct tcp_sock *tp)  {  	tp->snd_cwnd = min(tp->snd_cwnd, tp->snd_ssthresh);  	tp->snd_cwnd_cnt = 0; -	tp->bytes_acked = 0;  	TCP_ECN_queue_cwr(tp);  	tcp_moderate_cwnd(tp);  } @@ -3504,6 +3496,11 @@ static bool tcp_process_frto(struct sock *sk, int flag)  		}  	} else {  		if (!(flag & FLAG_DATA_ACKED) && (tp->frto_counter == 1)) { +			if (!tcp_packets_in_flight(tp)) { +				tcp_enter_frto_loss(sk, 2, flag); +				return true; +			} +  			/* Prevent sending of new data. */  			tp->snd_cwnd = min(tp->snd_cwnd,  					   tcp_packets_in_flight(tp)); @@ -3610,15 +3607,6 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)  	if (after(ack, prior_snd_una))  		flag |= FLAG_SND_UNA_ADVANCED; -	if (sysctl_tcp_abc) { -		if (icsk->icsk_ca_state < TCP_CA_CWR) -			tp->bytes_acked += ack - prior_snd_una; -		else if (icsk->icsk_ca_state == TCP_CA_Loss) -			/* we assume just one segment left network */ -			tp->bytes_acked += min(ack - prior_snd_una, -					       tp->mss_cache); -	} -  	prior_fackets = tp->fackets_out;  	prior_in_flight = tcp_packets_in_flight(tp); @@ -3872,7 +3860,7 @@ static bool tcp_parse_aligned_timestamp(struct tcp_sock *tp, const struct tcphdr  		++ptr;  		tp->rx_opt.rcv_tsval = ntohl(*ptr);  		++ptr; -		tp->rx_opt.rcv_tsecr = ntohl(*ptr); +		tp->rx_opt.rcv_tsecr = ntohl(*ptr) - tp->tsoffset;  		return true;  	}  	return false; @@ -3896,7 +3884,11 @@ static bool tcp_fast_parse_options(const struct sk_buff *skb,  		if (tcp_parse_aligned_timestamp(tp, th))  			return true;  	} +  	tcp_parse_options(skb, &tp->rx_opt, hvpp, 1, NULL); +	if (tp->rx_opt.saw_tstamp) +		tp->rx_opt.rcv_tsecr -= tp->tsoffset; +  	return true;  } @@ -5649,8 +5641,7 @@ static bool tcp_rcv_fastopen_synack(struct sock *sk, struct sk_buff *synack,  	 * the remote receives only the retransmitted (regular) SYNs: either  	 * the original SYN-data or the corresponding SYN-ACK is lost.  	 */ -	syn_drop = (cookie->len <= 0 && data && -		    inet_csk(sk)->icsk_retransmits); +	syn_drop = (cookie->len <= 0 && data && tp->total_retrans);  	tcp_fastopen_cache_set(sk, mss, cookie, syn_drop); @@ -5678,6 +5669,8 @@ static int tcp_rcv_synsent_state_process(struct sock *sk, struct sk_buff *skb,  	int saved_clamp = tp->rx_opt.mss_clamp;  	tcp_parse_options(skb, &tp->rx_opt, &hash_location, 0, &foc); +	if (tp->rx_opt.saw_tstamp) +		tp->rx_opt.rcv_tsecr -= tp->tsoffset;  	if (th->ack) {  		/* rfc793: |