aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/dccp/dccp.h11
-rw-r--r--net/dccp/feat.h7
-rw-r--r--net/dccp/proto.c1
-rw-r--r--net/dccp/sysctl.c25
-rw-r--r--net/dccp/timer.c16
5 files changed, 47 insertions, 13 deletions
diff --git a/net/dccp/dccp.h b/net/dccp/dccp.h
index d5c414bf7819..e7b96074a1b1 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);
64 64
65#define DCCP_XMIT_TIMEO 30000 /* Time/msecs for blocking transmit per packet */ 65#define DCCP_XMIT_TIMEO 30000 /* Time/msecs for blocking transmit per packet */
66 66
67/* sysctl variables for DCCP */
68extern int sysctl_dccp_request_retries;
69extern int sysctl_dccp_retries1;
70extern int sysctl_dccp_retries2;
71extern int dccp_feat_default_sequence_window;
72extern int dccp_feat_default_rx_ccid;
73extern int dccp_feat_default_tx_ccid;
74extern int dccp_feat_default_ack_ratio;
75extern int dccp_feat_default_send_ack_vector;
76extern int dccp_feat_default_send_ndp_count;
77
67/* is seq1 < seq2 ? */ 78/* is seq1 < seq2 ? */
68static inline int before48(const u64 seq1, const u64 seq2) 79static inline int before48(const u64 seq1, const u64 seq2)
69{ 80{
diff --git a/net/dccp/feat.h b/net/dccp/feat.h
index cee553d416ca..6048373c7186 100644
--- a/net/dccp/feat.h
+++ b/net/dccp/feat.h
@@ -26,11 +26,4 @@ extern void dccp_feat_clean(struct dccp_minisock *dmsk);
26extern int dccp_feat_clone(struct sock *oldsk, struct sock *newsk); 26extern int dccp_feat_clone(struct sock *oldsk, struct sock *newsk);
27extern int dccp_feat_init(struct dccp_minisock *dmsk); 27extern int dccp_feat_init(struct dccp_minisock *dmsk);
28 28
29extern int dccp_feat_default_sequence_window;
30extern int dccp_feat_default_rx_ccid;
31extern int dccp_feat_default_tx_ccid;
32extern int dccp_feat_default_ack_ratio;
33extern int dccp_feat_default_send_ack_vector;
34extern int dccp_feat_default_send_ndp_count;
35
36#endif /* _DCCP_FEAT_H */ 29#endif /* _DCCP_FEAT_H */
diff --git a/net/dccp/proto.c b/net/dccp/proto.c
index db54e557eff1..9c9c08cffdaf 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)
212 212
213 dccp_init_xmit_timers(sk); 213 dccp_init_xmit_timers(sk);
214 icsk->icsk_rto = DCCP_TIMEOUT_INIT; 214 icsk->icsk_rto = DCCP_TIMEOUT_INIT;
215 icsk->icsk_syn_retries = sysctl_dccp_request_retries;
215 sk->sk_state = DCCP_CLOSED; 216 sk->sk_state = DCCP_CLOSED;
216 sk->sk_write_space = dccp_write_space; 217 sk->sk_write_space = dccp_write_space;
217 icsk->icsk_sync_mss = dccp_sync_mss; 218 icsk->icsk_sync_mss = dccp_sync_mss;
diff --git a/net/dccp/sysctl.c b/net/dccp/sysctl.c
index 38bc157876f3..7b09f2179985 100644
--- a/net/dccp/sysctl.c
+++ b/net/dccp/sysctl.c
@@ -11,6 +11,7 @@
11 11
12#include <linux/mm.h> 12#include <linux/mm.h>
13#include <linux/sysctl.h> 13#include <linux/sysctl.h>
14#include "dccp.h"
14#include "feat.h" 15#include "feat.h"
15 16
16#ifndef CONFIG_SYSCTL 17#ifndef CONFIG_SYSCTL
@@ -66,6 +67,30 @@ static struct ctl_table dccp_default_table[] = {
66 .mode = 0644, 67 .mode = 0644,
67 .proc_handler = proc_dointvec, 68 .proc_handler = proc_dointvec,
68 }, 69 },
70 {
71 .ctl_name = NET_DCCP_DEFAULT_REQ_RETRIES,
72 .procname = "request_retries",
73 .data = &sysctl_dccp_request_retries,
74 .maxlen = sizeof(sysctl_dccp_request_retries),
75 .mode = 0644,
76 .proc_handler = proc_dointvec,
77 },
78 {
79 .ctl_name = NET_DCCP_DEFAULT_RETRIES1,
80 .procname = "retries1",
81 .data = &sysctl_dccp_retries1,
82 .maxlen = sizeof(sysctl_dccp_retries1),
83 .mode = 0644,
84 .proc_handler = proc_dointvec,
85 },
86 {
87 .ctl_name = NET_DCCP_DEFAULT_RETRIES2,
88 .procname = "retries2",
89 .data = &sysctl_dccp_retries2,
90 .maxlen = sizeof(sysctl_dccp_retries2),
91 .mode = 0644,
92 .proc_handler = proc_dointvec,
93 },
69 { .ctl_name = 0, } 94 { .ctl_name = 0, }
70}; 95};
71 96
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}