diff options
Diffstat (limited to 'net/dccp')
| -rw-r--r-- | net/dccp/dccp.h | 11 | ||||
| -rw-r--r-- | net/dccp/feat.h | 7 | ||||
| -rw-r--r-- | net/dccp/proto.c | 1 | ||||
| -rw-r--r-- | net/dccp/sysctl.c | 25 | ||||
| -rw-r--r-- | net/dccp/timer.c | 16 | 
5 files changed, 47 insertions, 13 deletions
diff --git a/net/dccp/dccp.h b/net/dccp/dccp.h index d5c414bf781..e7b96074a1b 100644 --- a/net/dccp/dccp.h +++ b/net/dccp/dccp.h @@ -64,6 +64,17 @@ extern void dccp_time_wait(struct sock *sk, int state, int timeo);  #define DCCP_XMIT_TIMEO 30000 /* Time/msecs for blocking transmit per packet */ +/* sysctl variables for DCCP */ +extern int  sysctl_dccp_request_retries; +extern int  sysctl_dccp_retries1; +extern int  sysctl_dccp_retries2; +extern int  dccp_feat_default_sequence_window; +extern int  dccp_feat_default_rx_ccid; +extern int  dccp_feat_default_tx_ccid; +extern int  dccp_feat_default_ack_ratio; +extern int  dccp_feat_default_send_ack_vector; +extern int  dccp_feat_default_send_ndp_count; +  /* is seq1 < seq2 ? */  static inline int before48(const u64 seq1, const u64 seq2)  { diff --git a/net/dccp/feat.h b/net/dccp/feat.h index cee553d416c..6048373c718 100644 --- a/net/dccp/feat.h +++ b/net/dccp/feat.h @@ -26,11 +26,4 @@ extern void dccp_feat_clean(struct dccp_minisock *dmsk);  extern int  dccp_feat_clone(struct sock *oldsk, struct sock *newsk);  extern int  dccp_feat_init(struct dccp_minisock *dmsk); -extern int  dccp_feat_default_sequence_window; -extern int  dccp_feat_default_rx_ccid; -extern int  dccp_feat_default_tx_ccid; -extern int  dccp_feat_default_ack_ratio; -extern int  dccp_feat_default_send_ack_vector; -extern int  dccp_feat_default_send_ndp_count; -  #endif /* _DCCP_FEAT_H */ diff --git a/net/dccp/proto.c b/net/dccp/proto.c index db54e557eff..9c9c08cffda 100644 --- a/net/dccp/proto.c +++ b/net/dccp/proto.c @@ -212,6 +212,7 @@ int dccp_init_sock(struct sock *sk, const __u8 ctl_sock_initialized)  	dccp_init_xmit_timers(sk);  	icsk->icsk_rto		= DCCP_TIMEOUT_INIT; +	icsk->icsk_syn_retries	= sysctl_dccp_request_retries;  	sk->sk_state		= DCCP_CLOSED;  	sk->sk_write_space	= dccp_write_space;  	icsk->icsk_sync_mss	= dccp_sync_mss; diff --git a/net/dccp/sysctl.c b/net/dccp/sysctl.c index 38bc157876f..7b09f217998 100644 --- a/net/dccp/sysctl.c +++ b/net/dccp/sysctl.c @@ -11,6 +11,7 @@  #include <linux/mm.h>  #include <linux/sysctl.h> +#include "dccp.h"  #include "feat.h"  #ifndef CONFIG_SYSCTL @@ -66,6 +67,30 @@ static struct ctl_table dccp_default_table[] = {  		.mode		= 0644,  		.proc_handler	= proc_dointvec,  	}, +	{ +		.ctl_name	= NET_DCCP_DEFAULT_REQ_RETRIES, +		.procname	= "request_retries", +		.data		= &sysctl_dccp_request_retries, +		.maxlen		= sizeof(sysctl_dccp_request_retries), +		.mode		= 0644, +		.proc_handler	= proc_dointvec, +	}, +	{ +		.ctl_name	= NET_DCCP_DEFAULT_RETRIES1, +		.procname	= "retries1", +		.data		= &sysctl_dccp_retries1, +		.maxlen		= sizeof(sysctl_dccp_retries1), +		.mode		= 0644, +		.proc_handler	= proc_dointvec, +	}, +	{ +		.ctl_name	= NET_DCCP_DEFAULT_RETRIES2, +		.procname	= "retries2", +		.data		= &sysctl_dccp_retries2, +		.maxlen		= sizeof(sysctl_dccp_retries2), +		.mode		= 0644, +		.proc_handler	= proc_dointvec, +	},  	{ .ctl_name = 0, }  }; diff --git a/net/dccp/timer.c b/net/dccp/timer.c index bda0af639ae..7b3f16e29a9 100644 --- a/net/dccp/timer.c +++ b/net/dccp/timer.c @@ -15,6 +15,11 @@  #include "dccp.h" +/* sysctl variables governing numbers of retransmission attempts */ +int  sysctl_dccp_request_retries	__read_mostly = TCP_SYN_RETRIES; +int  sysctl_dccp_retries1		__read_mostly = TCP_RETR1; +int  sysctl_dccp_retries2		__read_mostly = TCP_RETR2; +  static void dccp_write_timer(unsigned long data);  static void dccp_keepalive_timer(unsigned long data);  static void dccp_delack_timer(unsigned long data); @@ -44,11 +49,10 @@ static int dccp_write_timeout(struct sock *sk)  	if (sk->sk_state == DCCP_REQUESTING || sk->sk_state == DCCP_PARTOPEN) {  		if (icsk->icsk_retransmits != 0)  			dst_negative_advice(&sk->sk_dst_cache); -		retry_until = icsk->icsk_syn_retries ? : -			    /* FIXME! */ 3 /* FIXME! sysctl_tcp_syn_retries */; +		retry_until = icsk->icsk_syn_retries ? +			    : sysctl_dccp_request_retries;  	} else { -		if (icsk->icsk_retransmits >= -		     /* FIXME! sysctl_tcp_retries1 */ 5 /* FIXME! */) { +		if (icsk->icsk_retransmits >= sysctl_dccp_retries1) {  			/* NOTE. draft-ietf-tcpimpl-pmtud-01.txt requires pmtu  			   black hole detection. :-( @@ -72,7 +76,7 @@ static int dccp_write_timeout(struct sock *sk)  			dst_negative_advice(&sk->sk_dst_cache);  		} -		retry_until = /* FIXME! */ 15 /* FIXME! sysctl_tcp_retries2 */; +		retry_until = sysctl_dccp_retries2;  		/*  		 * FIXME: see tcp_write_timout and tcp_out_of_resources  		 */ @@ -196,7 +200,7 @@ backoff:  	icsk->icsk_rto = min(icsk->icsk_rto << 1, DCCP_RTO_MAX);  	inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS, icsk->icsk_rto,  				  DCCP_RTO_MAX); -	if (icsk->icsk_retransmits > 3 /* FIXME: sysctl_dccp_retries1 */) +	if (icsk->icsk_retransmits > sysctl_dccp_retries1)  		__sk_dst_reset(sk);  out:;  }  |