diff options
Diffstat (limited to 'net')
-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 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 */ | ||
68 | extern int sysctl_dccp_request_retries; | ||
69 | extern int sysctl_dccp_retries1; | ||
70 | extern int sysctl_dccp_retries2; | ||
71 | extern int dccp_feat_default_sequence_window; | ||
72 | extern int dccp_feat_default_rx_ccid; | ||
73 | extern int dccp_feat_default_tx_ccid; | ||
74 | extern int dccp_feat_default_ack_ratio; | ||
75 | extern int dccp_feat_default_send_ack_vector; | ||
76 | extern int dccp_feat_default_send_ndp_count; | ||
77 | |||
67 | /* is seq1 < seq2 ? */ | 78 | /* is seq1 < seq2 ? */ |
68 | static inline int before48(const u64 seq1, const u64 seq2) | 79 | static 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); | |||
26 | extern int dccp_feat_clone(struct sock *oldsk, struct sock *newsk); | 26 | extern int dccp_feat_clone(struct sock *oldsk, struct sock *newsk); |
27 | extern int dccp_feat_init(struct dccp_minisock *dmsk); | 27 | extern int dccp_feat_init(struct dccp_minisock *dmsk); |
28 | 28 | ||
29 | extern int dccp_feat_default_sequence_window; | ||
30 | extern int dccp_feat_default_rx_ccid; | ||
31 | extern int dccp_feat_default_tx_ccid; | ||
32 | extern int dccp_feat_default_ack_ratio; | ||
33 | extern int dccp_feat_default_send_ack_vector; | ||
34 | extern 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 */ | ||
19 | int sysctl_dccp_request_retries __read_mostly = TCP_SYN_RETRIES; | ||
20 | int sysctl_dccp_retries1 __read_mostly = TCP_RETR1; | ||
21 | int sysctl_dccp_retries2 __read_mostly = TCP_RETR2; | ||
22 | |||
18 | static void dccp_write_timer(unsigned long data); | 23 | static void dccp_write_timer(unsigned long data); |
19 | static void dccp_keepalive_timer(unsigned long data); | 24 | static void dccp_keepalive_timer(unsigned long data); |
20 | static void dccp_delack_timer(unsigned long data); | 25 | static 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); |
201 | out:; | 205 | out:; |
202 | } | 206 | } |