[SCTP] Make init & delayed sack timeouts configurable by user.
Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com> Signed-off-by: Sridhar Samudrala <sri@us.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7a1af5d7bb
commit
2f85a42964
@ -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 };
|
|||||||
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 {
|
|||||||
*/
|
*/
|
||||||
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 {
|
|||||||
#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,
|
|||||||
/* 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,
|
|||||||
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)
|
|||||||
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 @@
|
|||||||
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[] = {
|
|||||||
.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,
|
|||||||
|
|
||||||
/* 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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user