Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2e2e9e92 authored by Gerrit Renker's avatar Gerrit Renker Committed by David S. Miller
Browse files

[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: default avatarGerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@mandriva.com>
parent e11d9d30
Loading
Loading
Loading
Loading
+41 −0
Original line number Diff line number Diff line
@@ -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
=====

+3 −0
Original line number Diff line number Diff line
@@ -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 */
+11 −0
Original line number Diff line number Diff line
@@ -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)
{
+0 −7
Original line number Diff line number Diff line
@@ -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 −0
Original line number Diff line number Diff line
@@ -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;
Loading