diff options
| author | Christoph Paasch <christoph.paasch@uclouvain.be> | 2013-03-17 08:23:34 +0000 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2013-03-17 14:35:13 -0400 | 
| commit | 1a2c6181c4a1922021b4d7df373bba612c3e5f04 (patch) | |
| tree | 1346c9b1db83495a98fbcf95f8e521c67fc55cb9 /net/ipv6/tcp_ipv6.c | |
| parent | 94d8f2b133c9ff97105adc1233d1a35e16e1e7a6 (diff) | |
| download | olio-linux-3.10-1a2c6181c4a1922021b4d7df373bba612c3e5f04.tar.xz olio-linux-3.10-1a2c6181c4a1922021b4d7df373bba612c3e5f04.zip  | |
tcp: Remove TCPCT
TCPCT uses option-number 253, reserved for experimental use and should
not be used in production environments.
Further, TCPCT does not fully implement RFC 6013.
As a nice side-effect, removing TCPCT increases TCP's performance for
very short flows:
Doing an apache-benchmark with -c 100 -n 100000, sending HTTP-requests
for files of 1KB size.
before this patch:
	average (among 7 runs) of 20845.5 Requests/Second
after:
	average (among 7 runs) of 21403.6 Requests/Second
Signed-off-by: Christoph Paasch <christoph.paasch@uclouvain.be>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/tcp_ipv6.c')
| -rw-r--r-- | net/ipv6/tcp_ipv6.c | 56 | 
1 files changed, 4 insertions, 52 deletions
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 9b6460055df..0a97add2ab7 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c @@ -454,7 +454,6 @@ out:  static int tcp_v6_send_synack(struct sock *sk, struct dst_entry *dst,  			      struct flowi6 *fl6,  			      struct request_sock *req, -			      struct request_values *rvp,  			      u16 queue_mapping)  {  	struct inet6_request_sock *treq = inet6_rsk(req); @@ -466,7 +465,7 @@ static int tcp_v6_send_synack(struct sock *sk, struct dst_entry *dst,  	if (!dst && (dst = inet6_csk_route_req(sk, fl6, req)) == NULL)  		goto done; -	skb = tcp_make_synack(sk, dst, req, rvp, NULL); +	skb = tcp_make_synack(sk, dst, req, NULL);  	if (skb) {  		__tcp_v6_send_check(skb, &treq->loc_addr, &treq->rmt_addr); @@ -481,13 +480,12 @@ done:  	return err;  } -static int tcp_v6_rtx_synack(struct sock *sk, struct request_sock *req, -			     struct request_values *rvp) +static int tcp_v6_rtx_synack(struct sock *sk, struct request_sock *req)  {  	struct flowi6 fl6;  	int res; -	res = tcp_v6_send_synack(sk, NULL, &fl6, req, rvp, 0); +	res = tcp_v6_send_synack(sk, NULL, &fl6, req, 0);  	if (!res)  		TCP_INC_STATS_BH(sock_net(sk), TCP_MIB_RETRANSSEGS);  	return res; @@ -940,9 +938,7 @@ static struct sock *tcp_v6_hnd_req(struct sock *sk,struct sk_buff *skb)   */  static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)  { -	struct tcp_extend_values tmp_ext;  	struct tcp_options_received tmp_opt; -	const u8 *hash_location;  	struct request_sock *req;  	struct inet6_request_sock *treq;  	struct ipv6_pinfo *np = inet6_sk(sk); @@ -980,50 +976,7 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)  	tcp_clear_options(&tmp_opt);  	tmp_opt.mss_clamp = IPV6_MIN_MTU - sizeof(struct tcphdr) - sizeof(struct ipv6hdr);  	tmp_opt.user_mss = tp->rx_opt.user_mss; -	tcp_parse_options(skb, &tmp_opt, &hash_location, 0, NULL); - -	if (tmp_opt.cookie_plus > 0 && -	    tmp_opt.saw_tstamp && -	    !tp->rx_opt.cookie_out_never && -	    (sysctl_tcp_cookie_size > 0 || -	     (tp->cookie_values != NULL && -	      tp->cookie_values->cookie_desired > 0))) { -		u8 *c; -		u32 *d; -		u32 *mess = &tmp_ext.cookie_bakery[COOKIE_DIGEST_WORDS]; -		int l = tmp_opt.cookie_plus - TCPOLEN_COOKIE_BASE; - -		if (tcp_cookie_generator(&tmp_ext.cookie_bakery[0]) != 0) -			goto drop_and_free; - -		/* Secret recipe starts with IP addresses */ -		d = (__force u32 *)&ipv6_hdr(skb)->daddr.s6_addr32[0]; -		*mess++ ^= *d++; -		*mess++ ^= *d++; -		*mess++ ^= *d++; -		*mess++ ^= *d++; -		d = (__force u32 *)&ipv6_hdr(skb)->saddr.s6_addr32[0]; -		*mess++ ^= *d++; -		*mess++ ^= *d++; -		*mess++ ^= *d++; -		*mess++ ^= *d++; - -		/* plus variable length Initiator Cookie */ -		c = (u8 *)mess; -		while (l-- > 0) -			*c++ ^= *hash_location++; - -		want_cookie = false;	/* not our kind of cookie */ -		tmp_ext.cookie_out_never = 0; /* false */ -		tmp_ext.cookie_plus = tmp_opt.cookie_plus; -	} else if (!tp->rx_opt.cookie_in_always) { -		/* redundant indications, but ensure initialization. */ -		tmp_ext.cookie_out_never = 1; /* true */ -		tmp_ext.cookie_plus = 0; -	} else { -		goto drop_and_free; -	} -	tmp_ext.cookie_in_always = tp->rx_opt.cookie_in_always; +	tcp_parse_options(skb, &tmp_opt, 0, NULL);  	if (want_cookie && !tmp_opt.saw_tstamp)  		tcp_clear_options(&tmp_opt); @@ -1101,7 +1054,6 @@ have_isn:  		goto drop_and_release;  	if (tcp_v6_send_synack(sk, dst, &fl6, req, -			       (struct request_values *)&tmp_ext,  			       skb_get_queue_mapping(skb)) ||  	    want_cookie)  		goto drop_and_free;  |