Commit 2f85a429 authored by Vlad Yasevich's avatar Vlad Yasevich Committed by David S. Miller

[SCTP] Make init & delayed sack timeouts configurable by user.

Signed-off-by: default avatarVlad Yasevich <vladislav.yasevich@hp.com>
Signed-off-by: default avatarSridhar Samudrala <sri@us.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7a1af5d7
...@@ -641,6 +641,7 @@ enum { ...@@ -641,6 +641,7 @@ enum {
NET_SCTP_ADDIP_ENABLE = 13, NET_SCTP_ADDIP_ENABLE = 13,
NET_SCTP_PRSCTP_ENABLE = 14, NET_SCTP_PRSCTP_ENABLE = 14,
NET_SCTP_SNDBUF_POLICY = 15, NET_SCTP_SNDBUF_POLICY = 15,
NET_SCTP_SACK_TIMEOUT = 16,
}; };
/* /proc/sys/net/bridge */ /* /proc/sys/net/bridge */
......
...@@ -263,23 +263,11 @@ enum { SCTP_MIN_PMTU = 576 }; ...@@ -263,23 +263,11 @@ enum { SCTP_MIN_PMTU = 576 };
enum { SCTP_MAX_DUP_TSNS = 16 }; enum { SCTP_MAX_DUP_TSNS = 16 };
enum { SCTP_MAX_GABS = 16 }; enum { SCTP_MAX_GABS = 16 };
/* Here we define the default timers. */ /* Heartbeat interval - 30 secs */
#define SCTP_DEFAULT_TIMEOUT_HEARTBEAT (30 * HZ)
/* cookie timer def = ? seconds */ /* Delayed sack timer - 200ms */
#define SCTP_DEFAULT_TIMEOUT_T1_COOKIE (3 * HZ)
/* init timer def = 3 seconds */
#define SCTP_DEFAULT_TIMEOUT_T1_INIT (3 * HZ)
/* shutdown timer def = 300 ms */
#define SCTP_DEFAULT_TIMEOUT_T2_SHUTDOWN ((300 * HZ) / 1000)
/* 0 seconds + RTO */
#define SCTP_DEFAULT_TIMEOUT_HEARTBEAT (10 * HZ)
/* recv timer def = 200ms (in usec) */
#define SCTP_DEFAULT_TIMEOUT_SACK ((200 * HZ) / 1000) #define SCTP_DEFAULT_TIMEOUT_SACK ((200 * HZ) / 1000)
#define SCTP_DEFAULT_TIMEOUT_SACK_MAX ((500 * HZ) / 1000) /* 500 ms */
/* RTO.Initial - 3 seconds /* RTO.Initial - 3 seconds
* RTO.Min - 1 second * RTO.Min - 1 second
......
...@@ -161,6 +161,9 @@ extern struct sctp_globals { ...@@ -161,6 +161,9 @@ extern struct sctp_globals {
*/ */
int sndbuf_policy; int sndbuf_policy;
/* Delayed SACK timeout 200ms default*/
int sack_timeout;
/* HB.interval - 30 seconds */ /* HB.interval - 30 seconds */
int hb_interval; int hb_interval;
...@@ -217,6 +220,7 @@ extern struct sctp_globals { ...@@ -217,6 +220,7 @@ extern struct sctp_globals {
#define sctp_sndbuf_policy (sctp_globals.sndbuf_policy) #define sctp_sndbuf_policy (sctp_globals.sndbuf_policy)
#define sctp_max_retrans_path (sctp_globals.max_retrans_path) #define sctp_max_retrans_path (sctp_globals.max_retrans_path)
#define sctp_max_retrans_init (sctp_globals.max_retrans_init) #define sctp_max_retrans_init (sctp_globals.max_retrans_init)
#define sctp_sack_timeout (sctp_globals.sack_timeout)
#define sctp_hb_interval (sctp_globals.hb_interval) #define sctp_hb_interval (sctp_globals.hb_interval)
#define sctp_max_instreams (sctp_globals.max_instreams) #define sctp_max_instreams (sctp_globals.max_instreams)
#define sctp_max_outstreams (sctp_globals.max_outstreams) #define sctp_max_outstreams (sctp_globals.max_outstreams)
......
...@@ -102,9 +102,9 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep, ...@@ -102,9 +102,9 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep,
/* Set up the base timeout information. */ /* Set up the base timeout information. */
ep->timeouts[SCTP_EVENT_TIMEOUT_NONE] = 0; ep->timeouts[SCTP_EVENT_TIMEOUT_NONE] = 0;
ep->timeouts[SCTP_EVENT_TIMEOUT_T1_COOKIE] = ep->timeouts[SCTP_EVENT_TIMEOUT_T1_COOKIE] =
SCTP_DEFAULT_TIMEOUT_T1_COOKIE; msecs_to_jiffies(sp->rtoinfo.srto_initial);
ep->timeouts[SCTP_EVENT_TIMEOUT_T1_INIT] = ep->timeouts[SCTP_EVENT_TIMEOUT_T1_INIT] =
SCTP_DEFAULT_TIMEOUT_T1_INIT; msecs_to_jiffies(sp->rtoinfo.srto_initial);
ep->timeouts[SCTP_EVENT_TIMEOUT_T2_SHUTDOWN] = ep->timeouts[SCTP_EVENT_TIMEOUT_T2_SHUTDOWN] =
msecs_to_jiffies(sp->rtoinfo.srto_initial); msecs_to_jiffies(sp->rtoinfo.srto_initial);
ep->timeouts[SCTP_EVENT_TIMEOUT_T3_RTX] = 0; ep->timeouts[SCTP_EVENT_TIMEOUT_T3_RTX] = 0;
...@@ -117,12 +117,9 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep, ...@@ -117,12 +117,9 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep,
ep->timeouts[SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD] ep->timeouts[SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD]
= 5 * msecs_to_jiffies(sp->rtoinfo.srto_max); = 5 * msecs_to_jiffies(sp->rtoinfo.srto_max);
ep->timeouts[SCTP_EVENT_TIMEOUT_HEARTBEAT] = ep->timeouts[SCTP_EVENT_TIMEOUT_HEARTBEAT] = 0;
SCTP_DEFAULT_TIMEOUT_HEARTBEAT; ep->timeouts[SCTP_EVENT_TIMEOUT_SACK] = sctp_sack_timeout;
ep->timeouts[SCTP_EVENT_TIMEOUT_SACK] = ep->timeouts[SCTP_EVENT_TIMEOUT_AUTOCLOSE] = sp->autoclose * HZ;
SCTP_DEFAULT_TIMEOUT_SACK;
ep->timeouts[SCTP_EVENT_TIMEOUT_AUTOCLOSE] =
sp->autoclose * HZ;
/* Use SCTP specific send buffer space queues. */ /* Use SCTP specific send buffer space queues. */
ep->sndbuf_policy = sctp_sndbuf_policy; ep->sndbuf_policy = sctp_sndbuf_policy;
......
...@@ -1050,7 +1050,10 @@ SCTP_STATIC __init int sctp_init(void) ...@@ -1050,7 +1050,10 @@ SCTP_STATIC __init int sctp_init(void)
sctp_sndbuf_policy = 0; sctp_sndbuf_policy = 0;
/* HB.interval - 30 seconds */ /* HB.interval - 30 seconds */
sctp_hb_interval = 30 * HZ; sctp_hb_interval = SCTP_DEFAULT_TIMEOUT_HEARTBEAT;
/* delayed SACK timeout */
sctp_sack_timeout = SCTP_DEFAULT_TIMEOUT_SACK;
/* Implementation specific variables. */ /* Implementation specific variables. */
......
...@@ -47,6 +47,8 @@ ...@@ -47,6 +47,8 @@
static ctl_handler sctp_sysctl_jiffies_ms; static ctl_handler sctp_sysctl_jiffies_ms;
static long rto_timer_min = 1; static long rto_timer_min = 1;
static long rto_timer_max = 86400000; /* One day */ static long rto_timer_max = 86400000; /* One day */
static long sack_timer_min = 1;
static long sack_timer_max = 500;
static ctl_table sctp_table[] = { static ctl_table sctp_table[] = {
{ {
...@@ -187,6 +189,17 @@ static ctl_table sctp_table[] = { ...@@ -187,6 +189,17 @@ static ctl_table sctp_table[] = {
.mode = 0644, .mode = 0644,
.proc_handler = &proc_dointvec .proc_handler = &proc_dointvec
}, },
{
.ctl_name = NET_SCTP_SACK_TIMEOUT,
.procname = "sack_timeout",
.data = &sctp_sack_timeout,
.maxlen = sizeof(long),
.mode = 0644,
.proc_handler = &proc_doulongvec_ms_jiffies_minmax,
.strategy = &sctp_sysctl_jiffies_ms,
.extra1 = &sack_timer_min,
.extra2 = &sack_timer_max,
},
{ .ctl_name = 0 } { .ctl_name = 0 }
}; };
......
...@@ -103,7 +103,6 @@ static struct sctp_transport *sctp_transport_init(struct sctp_transport *peer, ...@@ -103,7 +103,6 @@ static struct sctp_transport *sctp_transport_init(struct sctp_transport *peer,
/* Set up the heartbeat timer. */ /* Set up the heartbeat timer. */
init_timer(&peer->hb_timer); init_timer(&peer->hb_timer);
peer->hb_interval = SCTP_DEFAULT_TIMEOUT_HEARTBEAT;
peer->hb_timer.function = sctp_generate_heartbeat_event; peer->hb_timer.function = sctp_generate_heartbeat_event;
peer->hb_timer.data = (unsigned long)peer; peer->hb_timer.data = (unsigned long)peer;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment