Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 41640
b: refs/heads/master
c: 2e2e9e9
h: refs/heads/master
v: v3
  • Loading branch information
Gerrit Renker authored and David S. Miller committed Dec 3, 2006
1 parent eff85fc commit 0d9f97f
Show file tree
Hide file tree
Showing 8 changed files with 92 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e11d9d30802278af22e78d8c10f348b683670cd9
refs/heads/master: 2e2e9e92bd723244ea20fa488b1780111f2b05e1
41 changes: 41 additions & 0 deletions trunk/Documentation/networking/dccp.txt
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,47 @@ DCCP_SOCKOPT_SEND_CSCOV is for the receiver and has a different meaning: it
coverage value are also acceptable. The higher the number, the more
restrictive this setting (see [RFC 4340, sec. 9.2.1]).

Sysctl variables
================
Several DCCP default parameters can be managed by the following sysctls
(sysctl net.dccp.default or /proc/sys/net/dccp/default):

request_retries
The number of active connection initiation retries (the number of
Requests minus one) before timing out. In addition, it also governs
the behaviour of the other, passive side: this variable also sets
the number of times DCCP repeats sending a Response when the initial
handshake does not progress from RESPOND to OPEN (i.e. when no Ack
is received after the initial Request). This value should be greater
than 0, suggested is less than 10. Analogue of tcp_syn_retries.

retries1
How often a DCCP Response is retransmitted until the listening DCCP
side considers its connecting peer dead. Analogue of tcp_retries1.

retries2
The number of times a general DCCP packet is retransmitted. This has
importance for retransmitted acknowledgments and feature negotiation,
data packets are never retransmitted. Analogue of tcp_retries2.

send_ndp = 1
Whether or not to send NDP count options (sec. 7.7.2).

send_ackvec = 1
Whether or not to send Ack Vector options (sec. 11.5).

ack_ratio = 2
The default Ack Ratio (sec. 11.3) to use.

tx_ccid = 2
Default CCID for the sender-receiver half-connection.

rx_ccid = 2
Default CCID for the receiver-sender half-connection.

seq_window = 100
The initial sequence window (sec. 7.5.2).

Notes
=====

Expand Down
3 changes: 3 additions & 0 deletions trunk/include/linux/sysctl.h
Original file line number Diff line number Diff line change
Expand Up @@ -614,6 +614,9 @@ enum {
NET_DCCP_DEFAULT_ACK_RATIO = 4,
NET_DCCP_DEFAULT_SEND_ACKVEC = 5,
NET_DCCP_DEFAULT_SEND_NDP = 6,
NET_DCCP_DEFAULT_REQ_RETRIES = 7,
NET_DCCP_DEFAULT_RETRIES1 = 8,
NET_DCCP_DEFAULT_RETRIES2 = 9,
};

/* /proc/sys/net/ipx */
Expand Down
11 changes: 11 additions & 0 deletions trunk/net/dccp/dccp.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
7 changes: 0 additions & 7 deletions trunk/net/dccp/feat.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
1 change: 1 addition & 0 deletions trunk/net/dccp/proto.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
25 changes: 25 additions & 0 deletions trunk/net/dccp/sysctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

#include <linux/mm.h>
#include <linux/sysctl.h>
#include "dccp.h"
#include "feat.h"

#ifndef CONFIG_SYSCTL
Expand Down Expand Up @@ -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, }
};

Expand Down
16 changes: 10 additions & 6 deletions trunk/net/dccp/timer.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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. :-(
Expand All @@ -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
*/
Expand Down Expand Up @@ -196,7 +200,7 @@ static void dccp_retransmit_timer(struct sock *sk)
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:;
}
Expand Down

0 comments on commit 0d9f97f

Please sign in to comment.