[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>

authored by Vlad Yasevich and committed by David S. Miller 2f85a429 7a1af5d7

+30 -25
+1
include/linux/sysctl.h
··· 641 NET_SCTP_ADDIP_ENABLE = 13, 642 NET_SCTP_PRSCTP_ENABLE = 14, 643 NET_SCTP_SNDBUF_POLICY = 15, 644 }; 645 646 /* /proc/sys/net/bridge */
··· 641 NET_SCTP_ADDIP_ENABLE = 13, 642 NET_SCTP_PRSCTP_ENABLE = 14, 643 NET_SCTP_SNDBUF_POLICY = 15, 644 + NET_SCTP_SACK_TIMEOUT = 16, 645 }; 646 647 /* /proc/sys/net/bridge */
+3 -15
include/net/sctp/constants.h
··· 263 enum { SCTP_MAX_DUP_TSNS = 16 }; 264 enum { SCTP_MAX_GABS = 16 }; 265 266 - /* Here we define the default timers. */ 267 268 - /* cookie timer def = ? seconds */ 269 - #define SCTP_DEFAULT_TIMEOUT_T1_COOKIE (3 * HZ) 270 - 271 - /* init timer def = 3 seconds */ 272 - #define SCTP_DEFAULT_TIMEOUT_T1_INIT (3 * HZ) 273 - 274 - /* shutdown timer def = 300 ms */ 275 - #define SCTP_DEFAULT_TIMEOUT_T2_SHUTDOWN ((300 * HZ) / 1000) 276 - 277 - /* 0 seconds + RTO */ 278 - #define SCTP_DEFAULT_TIMEOUT_HEARTBEAT (10 * HZ) 279 - 280 - /* recv timer def = 200ms (in usec) */ 281 #define SCTP_DEFAULT_TIMEOUT_SACK ((200 * HZ) / 1000) 282 - #define SCTP_DEFAULT_TIMEOUT_SACK_MAX ((500 * HZ) / 1000) /* 500 ms */ 283 284 /* RTO.Initial - 3 seconds 285 * RTO.Min - 1 second
··· 263 enum { SCTP_MAX_DUP_TSNS = 16 }; 264 enum { SCTP_MAX_GABS = 16 }; 265 266 + /* Heartbeat interval - 30 secs */ 267 + #define SCTP_DEFAULT_TIMEOUT_HEARTBEAT (30 * HZ) 268 269 + /* Delayed sack timer - 200ms */ 270 #define SCTP_DEFAULT_TIMEOUT_SACK ((200 * HZ) / 1000) 271 272 /* RTO.Initial - 3 seconds 273 * RTO.Min - 1 second
+4
include/net/sctp/structs.h
··· 161 */ 162 int sndbuf_policy; 163 164 /* HB.interval - 30 seconds */ 165 int hb_interval; 166 ··· 220 #define sctp_sndbuf_policy (sctp_globals.sndbuf_policy) 221 #define sctp_max_retrans_path (sctp_globals.max_retrans_path) 222 #define sctp_max_retrans_init (sctp_globals.max_retrans_init) 223 #define sctp_hb_interval (sctp_globals.hb_interval) 224 #define sctp_max_instreams (sctp_globals.max_instreams) 225 #define sctp_max_outstreams (sctp_globals.max_outstreams)
··· 161 */ 162 int sndbuf_policy; 163 164 + /* Delayed SACK timeout 200ms default*/ 165 + int sack_timeout; 166 + 167 /* HB.interval - 30 seconds */ 168 int hb_interval; 169 ··· 217 #define sctp_sndbuf_policy (sctp_globals.sndbuf_policy) 218 #define sctp_max_retrans_path (sctp_globals.max_retrans_path) 219 #define sctp_max_retrans_init (sctp_globals.max_retrans_init) 220 + #define sctp_sack_timeout (sctp_globals.sack_timeout) 221 #define sctp_hb_interval (sctp_globals.hb_interval) 222 #define sctp_max_instreams (sctp_globals.max_instreams) 223 #define sctp_max_outstreams (sctp_globals.max_outstreams)
+5 -8
net/sctp/endpointola.c
··· 102 /* Set up the base timeout information. */ 103 ep->timeouts[SCTP_EVENT_TIMEOUT_NONE] = 0; 104 ep->timeouts[SCTP_EVENT_TIMEOUT_T1_COOKIE] = 105 - SCTP_DEFAULT_TIMEOUT_T1_COOKIE; 106 ep->timeouts[SCTP_EVENT_TIMEOUT_T1_INIT] = 107 - SCTP_DEFAULT_TIMEOUT_T1_INIT; 108 ep->timeouts[SCTP_EVENT_TIMEOUT_T2_SHUTDOWN] = 109 msecs_to_jiffies(sp->rtoinfo.srto_initial); 110 ep->timeouts[SCTP_EVENT_TIMEOUT_T3_RTX] = 0; ··· 117 ep->timeouts[SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD] 118 = 5 * msecs_to_jiffies(sp->rtoinfo.srto_max); 119 120 - ep->timeouts[SCTP_EVENT_TIMEOUT_HEARTBEAT] = 121 - SCTP_DEFAULT_TIMEOUT_HEARTBEAT; 122 - ep->timeouts[SCTP_EVENT_TIMEOUT_SACK] = 123 - SCTP_DEFAULT_TIMEOUT_SACK; 124 - ep->timeouts[SCTP_EVENT_TIMEOUT_AUTOCLOSE] = 125 - sp->autoclose * HZ; 126 127 /* Use SCTP specific send buffer space queues. */ 128 ep->sndbuf_policy = sctp_sndbuf_policy;
··· 102 /* Set up the base timeout information. */ 103 ep->timeouts[SCTP_EVENT_TIMEOUT_NONE] = 0; 104 ep->timeouts[SCTP_EVENT_TIMEOUT_T1_COOKIE] = 105 + msecs_to_jiffies(sp->rtoinfo.srto_initial); 106 ep->timeouts[SCTP_EVENT_TIMEOUT_T1_INIT] = 107 + msecs_to_jiffies(sp->rtoinfo.srto_initial); 108 ep->timeouts[SCTP_EVENT_TIMEOUT_T2_SHUTDOWN] = 109 msecs_to_jiffies(sp->rtoinfo.srto_initial); 110 ep->timeouts[SCTP_EVENT_TIMEOUT_T3_RTX] = 0; ··· 117 ep->timeouts[SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD] 118 = 5 * msecs_to_jiffies(sp->rtoinfo.srto_max); 119 120 + ep->timeouts[SCTP_EVENT_TIMEOUT_HEARTBEAT] = 0; 121 + ep->timeouts[SCTP_EVENT_TIMEOUT_SACK] = sctp_sack_timeout; 122 + ep->timeouts[SCTP_EVENT_TIMEOUT_AUTOCLOSE] = sp->autoclose * HZ; 123 124 /* Use SCTP specific send buffer space queues. */ 125 ep->sndbuf_policy = sctp_sndbuf_policy;
+4 -1
net/sctp/protocol.c
··· 1050 sctp_sndbuf_policy = 0; 1051 1052 /* HB.interval - 30 seconds */ 1053 - sctp_hb_interval = 30 * HZ; 1054 1055 /* Implementation specific variables. */ 1056
··· 1050 sctp_sndbuf_policy = 0; 1051 1052 /* HB.interval - 30 seconds */ 1053 + sctp_hb_interval = SCTP_DEFAULT_TIMEOUT_HEARTBEAT; 1054 + 1055 + /* delayed SACK timeout */ 1056 + sctp_sack_timeout = SCTP_DEFAULT_TIMEOUT_SACK; 1057 1058 /* Implementation specific variables. */ 1059
+13
net/sctp/sysctl.c
··· 47 static ctl_handler sctp_sysctl_jiffies_ms; 48 static long rto_timer_min = 1; 49 static long rto_timer_max = 86400000; /* One day */ 50 51 static ctl_table sctp_table[] = { 52 { ··· 188 .maxlen = sizeof(int), 189 .mode = 0644, 190 .proc_handler = &proc_dointvec 191 }, 192 { .ctl_name = 0 } 193 };
··· 47 static ctl_handler sctp_sysctl_jiffies_ms; 48 static long rto_timer_min = 1; 49 static long rto_timer_max = 86400000; /* One day */ 50 + static long sack_timer_min = 1; 51 + static long sack_timer_max = 500; 52 53 static ctl_table sctp_table[] = { 54 { ··· 186 .maxlen = sizeof(int), 187 .mode = 0644, 188 .proc_handler = &proc_dointvec 189 + }, 190 + { 191 + .ctl_name = NET_SCTP_SACK_TIMEOUT, 192 + .procname = "sack_timeout", 193 + .data = &sctp_sack_timeout, 194 + .maxlen = sizeof(long), 195 + .mode = 0644, 196 + .proc_handler = &proc_doulongvec_ms_jiffies_minmax, 197 + .strategy = &sctp_sysctl_jiffies_ms, 198 + .extra1 = &sack_timer_min, 199 + .extra2 = &sack_timer_max, 200 }, 201 { .ctl_name = 0 } 202 };
-1
net/sctp/transport.c
··· 103 104 /* Set up the heartbeat timer. */ 105 init_timer(&peer->hb_timer); 106 - peer->hb_interval = SCTP_DEFAULT_TIMEOUT_HEARTBEAT; 107 peer->hb_timer.function = sctp_generate_heartbeat_event; 108 peer->hb_timer.data = (unsigned long)peer; 109
··· 103 104 /* Set up the heartbeat timer. */ 105 init_timer(&peer->hb_timer); 106 peer->hb_timer.function = sctp_generate_heartbeat_event; 107 peer->hb_timer.data = (unsigned long)peer; 108