aboutsummaryrefslogtreecommitdiffstats
path: root/net/dccp/timer.c
diff options
context:
space:
mode:
authorGerrit Renker <gerrit@erg.abdn.ac.uk>2006-11-13 10:23:52 -0500
committerDavid S. Miller <davem@sunset.davemloft.net>2006-12-03 00:22:18 -0500
commit2e2e9e92bd723244ea20fa488b1780111f2b05e1 (patch)
tree2e859b2b0aa17d2e18927fe110cdefad6c4f5fe6 /net/dccp/timer.c
parente11d9d30802278af22e78d8c10f348b683670cd9 (diff)
[DCCP]: Add sysctls to control retransmission behaviour
This adds 3 sysctls which govern the retransmission behaviour of DCCP control packets (3way handshake, feature negotiation). It removes 4 FIXMEs from the code. The close resemblance of sysctl variables to their TCP analogues is emphasised not only by their name, but also by giving them the same initial values. This is useful since there is not much practical experience with DCCP yet. Furthermore, with regard to the previous patch, it is now possible to limit the number of keepalive-Responses by setting net.dccp.default.request_retries (also a bit like in TCP). Lastly, added documentation of all existing DCCP sysctls. Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk> Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
Diffstat (limited to 'net/dccp/timer.c')
-rw-r--r--net/dccp/timer.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/net/dccp/timer.c b/net/dccp/timer.c
index bda0af639ae4..7b3f16e29a97 100644
--- a/net/dccp/timer.c
+++ b/net/dccp/timer.c
@@ -15,6 +15,11 @@
15 15
16#include "dccp.h" 16#include "dccp.h"
17 17
18/* sysctl variables governing numbers of retransmission attempts */
19int sysctl_dccp_request_retries __read_mostly = TCP_SYN_RETRIES;
20int sysctl_dccp_retries1 __read_mostly = TCP_RETR1;
21int sysctl_dccp_retries2 __read_mostly = TCP_RETR2;
22
18static void dccp_write_timer(unsigned long data); 23static void dccp_write_timer(unsigned long data);
19static void dccp_keepalive_timer(unsigned long data); 24static void dccp_keepalive_timer(unsigned long data);
20static void dccp_delack_timer(unsigned long data); 25static void dccp_delack_timer(unsigned long data);
@@ -44,11 +49,10 @@ static int dccp_write_timeout(struct sock *sk)
44 if (sk->sk_state == DCCP_REQUESTING || sk->sk_state == DCCP_PARTOPEN) { 49 if (sk->sk_state == DCCP_REQUESTING || sk->sk_state == DCCP_PARTOPEN) {
45 if (icsk->icsk_retransmits != 0) 50 if (icsk->icsk_retransmits != 0)
46 dst_negative_advice(&sk->sk_dst_cache); 51 dst_negative_advice(&sk->sk_dst_cache);
47 retry_until = icsk->icsk_syn_retries ? : 52 retry_until = icsk->icsk_syn_retries ?
48 /* FIXME! */ 3 /* FIXME! sysctl_tcp_syn_retries */; 53 : sysctl_dccp_request_retries;
49 } else { 54 } else {
50 if (icsk->icsk_retransmits >= 55 if (icsk->icsk_retransmits >= sysctl_dccp_retries1) {
51 /* FIXME! sysctl_tcp_retries1 */ 5 /* FIXME! */) {
52 /* NOTE. draft-ietf-tcpimpl-pmtud-01.txt requires pmtu 56 /* NOTE. draft-ietf-tcpimpl-pmtud-01.txt requires pmtu
53 black hole detection. :-( 57 black hole detection. :-(
54 58
@@ -72,7 +76,7 @@ static int dccp_write_timeout(struct sock *sk)
72 dst_negative_advice(&sk->sk_dst_cache); 76 dst_negative_advice(&sk->sk_dst_cache);
73 } 77 }
74 78
75 retry_until = /* FIXME! */ 15 /* FIXME! sysctl_tcp_retries2 */; 79 retry_until = sysctl_dccp_retries2;
76 /* 80 /*
77 * FIXME: see tcp_write_timout and tcp_out_of_resources 81 * FIXME: see tcp_write_timout and tcp_out_of_resources
78 */ 82 */
@@ -196,7 +200,7 @@ backoff:
196 icsk->icsk_rto = min(icsk->icsk_rto << 1, DCCP_RTO_MAX); 200 icsk->icsk_rto = min(icsk->icsk_rto << 1, DCCP_RTO_MAX);
197 inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS, icsk->icsk_rto, 201 inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS, icsk->icsk_rto,
198 DCCP_RTO_MAX); 202 DCCP_RTO_MAX);
199 if (icsk->icsk_retransmits > 3 /* FIXME: sysctl_dccp_retries1 */) 203 if (icsk->icsk_retransmits > sysctl_dccp_retries1)
200 __sk_dst_reset(sk); 204 __sk_dst_reset(sk);
201out:; 205out:;
202} 206}