1 /* SCTP kernel implementation 2 * (C) Copyright IBM Corp. 2002, 2004 3 * Copyright (c) 2002 Intel Corp. 4 * 5 * This file is part of the SCTP kernel implementation 6 * 7 * Sysctl related interfaces for SCTP. 8 * 9 * This SCTP implementation is free software; 10 * you can redistribute it and/or modify it under the terms of 11 * the GNU General Public License as published by 12 * the Free Software Foundation; either version 2, or (at your option) 13 * any later version. 14 * 15 * This SCTP implementation is distributed in the hope that it 16 * will be useful, but WITHOUT ANY WARRANTY; without even the implied 17 * ************************ 18 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 19 * See the GNU General Public License for more details. 20 * 21 * You should have received a copy of the GNU General Public License 22 * along with GNU CC; see the file COPYING. If not, write to 23 * the Free Software Foundation, 59 Temple Place - Suite 330, 24 * Boston, MA 02111-1307, USA. 25 * 26 * Please send any bug reports or fixes you make to the 27 * email address(es): 28 * lksctp developers <lksctp-developers@lists.sourceforge.net> 29 * 30 * Or submit a bug report through the following website: 31 * http://www.sf.net/projects/lksctp 32 * 33 * Written or modified by: 34 * Mingqin Liu <liuming@us.ibm.com> 35 * Jon Grimm <jgrimm@us.ibm.com> 36 * Ardelle Fan <ardelle.fan@intel.com> 37 * Ryan Layer <rmlayer@us.ibm.com> 38 * Sridhar Samudrala <sri@us.ibm.com> 39 * 40 * Any bugs reported given to us we will try to fix... any fixes shared will 41 * be incorporated into the next SCTP release. 42 */ 43 44 #include <net/sctp/structs.h> 45 #include <net/sctp/sctp.h> 46 #include <linux/sysctl.h> 47 48 static int zero = 0; 49 static int one = 1; 50 static int timer_max = 86400000; /* ms in one day */ 51 static int int_max = INT_MAX; 52 static int sack_timer_min = 1; 53 static int sack_timer_max = 500; 54 static int addr_scope_max = 3; /* check sctp_scope_policy_t in include/net/sctp/constants.h for max entries */ 55 56 extern int sysctl_sctp_mem[3]; 57 extern int sysctl_sctp_rmem[3]; 58 extern int sysctl_sctp_wmem[3]; 59 60 static ctl_table sctp_table[] = { 61 { 62 .ctl_name = NET_SCTP_RTO_INITIAL, 63 .procname = "rto_initial", 64 .data = &sctp_rto_initial, 65 .maxlen = sizeof(unsigned int), 66 .mode = 0644, 67 .proc_handler = proc_dointvec_minmax, 68 .strategy = sysctl_intvec, 69 .extra1 = &one, 70 .extra2 = &timer_max 71 }, 72 { 73 .ctl_name = NET_SCTP_RTO_MIN, 74 .procname = "rto_min", 75 .data = &sctp_rto_min, 76 .maxlen = sizeof(unsigned int), 77 .mode = 0644, 78 .proc_handler = proc_dointvec_minmax, 79 .strategy = sysctl_intvec, 80 .extra1 = &one, 81 .extra2 = &timer_max 82 }, 83 { 84 .ctl_name = NET_SCTP_RTO_MAX, 85 .procname = "rto_max", 86 .data = &sctp_rto_max, 87 .maxlen = sizeof(unsigned int), 88 .mode = 0644, 89 .proc_handler = proc_dointvec_minmax, 90 .strategy = sysctl_intvec, 91 .extra1 = &one, 92 .extra2 = &timer_max 93 }, 94 { 95 .ctl_name = NET_SCTP_VALID_COOKIE_LIFE, 96 .procname = "valid_cookie_life", 97 .data = &sctp_valid_cookie_life, 98 .maxlen = sizeof(unsigned int), 99 .mode = 0644, 100 .proc_handler = proc_dointvec_minmax, 101 .strategy = sysctl_intvec, 102 .extra1 = &one, 103 .extra2 = &timer_max 104 }, 105 { 106 .ctl_name = NET_SCTP_MAX_BURST, 107 .procname = "max_burst", 108 .data = &sctp_max_burst, 109 .maxlen = sizeof(int), 110 .mode = 0644, 111 .proc_handler = proc_dointvec_minmax, 112 .strategy = sysctl_intvec, 113 .extra1 = &zero, 114 .extra2 = &int_max 115 }, 116 { 117 .ctl_name = NET_SCTP_ASSOCIATION_MAX_RETRANS, 118 .procname = "association_max_retrans", 119 .data = &sctp_max_retrans_association, 120 .maxlen = sizeof(int), 121 .mode = 0644, 122 .proc_handler = proc_dointvec_minmax, 123 .strategy = sysctl_intvec, 124 .extra1 = &one, 125 .extra2 = &int_max 126 }, 127 { 128 .ctl_name = NET_SCTP_SNDBUF_POLICY, 129 .procname = "sndbuf_policy", 130 .data = &sctp_sndbuf_policy, 131 .maxlen = sizeof(int), 132 .mode = 0644, 133 .proc_handler = proc_dointvec, 134 .strategy = sysctl_intvec 135 }, 136 { 137 .ctl_name = NET_SCTP_RCVBUF_POLICY, 138 .procname = "rcvbuf_policy", 139 .data = &sctp_rcvbuf_policy, 140 .maxlen = sizeof(int), 141 .mode = 0644, 142 .proc_handler = proc_dointvec, 143 .strategy = sysctl_intvec 144 }, 145 { 146 .ctl_name = NET_SCTP_PATH_MAX_RETRANS, 147 .procname = "path_max_retrans", 148 .data = &sctp_max_retrans_path, 149 .maxlen = sizeof(int), 150 .mode = 0644, 151 .proc_handler = proc_dointvec_minmax, 152 .strategy = sysctl_intvec, 153 .extra1 = &one, 154 .extra2 = &int_max 155 }, 156 { 157 .ctl_name = NET_SCTP_MAX_INIT_RETRANSMITS, 158 .procname = "max_init_retransmits", 159 .data = &sctp_max_retrans_init, 160 .maxlen = sizeof(int), 161 .mode = 0644, 162 .proc_handler = proc_dointvec_minmax, 163 .strategy = sysctl_intvec, 164 .extra1 = &one, 165 .extra2 = &int_max 166 }, 167 { 168 .ctl_name = NET_SCTP_HB_INTERVAL, 169 .procname = "hb_interval", 170 .data = &sctp_hb_interval, 171 .maxlen = sizeof(unsigned int), 172 .mode = 0644, 173 .proc_handler = proc_dointvec_minmax, 174 .strategy = sysctl_intvec, 175 .extra1 = &one, 176 .extra2 = &timer_max 177 }, 178 { 179 .ctl_name = NET_SCTP_PRESERVE_ENABLE, 180 .procname = "cookie_preserve_enable", 181 .data = &sctp_cookie_preserve_enable, 182 .maxlen = sizeof(int), 183 .mode = 0644, 184 .proc_handler = proc_dointvec, 185 .strategy = sysctl_intvec 186 }, 187 { 188 .ctl_name = NET_SCTP_RTO_ALPHA, 189 .procname = "rto_alpha_exp_divisor", 190 .data = &sctp_rto_alpha, 191 .maxlen = sizeof(int), 192 .mode = 0444, 193 .proc_handler = proc_dointvec, 194 .strategy = sysctl_intvec 195 }, 196 { 197 .ctl_name = NET_SCTP_RTO_BETA, 198 .procname = "rto_beta_exp_divisor", 199 .data = &sctp_rto_beta, 200 .maxlen = sizeof(int), 201 .mode = 0444, 202 .proc_handler = proc_dointvec, 203 .strategy = sysctl_intvec 204 }, 205 { 206 .ctl_name = NET_SCTP_ADDIP_ENABLE, 207 .procname = "addip_enable", 208 .data = &sctp_addip_enable, 209 .maxlen = sizeof(int), 210 .mode = 0644, 211 .proc_handler = proc_dointvec, 212 .strategy = sysctl_intvec 213 }, 214 { 215 .ctl_name = NET_SCTP_PRSCTP_ENABLE, 216 .procname = "prsctp_enable", 217 .data = &sctp_prsctp_enable, 218 .maxlen = sizeof(int), 219 .mode = 0644, 220 .proc_handler = proc_dointvec, 221 .strategy = sysctl_intvec 222 }, 223 { 224 .ctl_name = NET_SCTP_SACK_TIMEOUT, 225 .procname = "sack_timeout", 226 .data = &sctp_sack_timeout, 227 .maxlen = sizeof(int), 228 .mode = 0644, 229 .proc_handler = proc_dointvec_minmax, 230 .strategy = sysctl_intvec, 231 .extra1 = &sack_timer_min, 232 .extra2 = &sack_timer_max, 233 }, 234 { 235 .ctl_name = CTL_UNNUMBERED, 236 .procname = "sctp_mem", 237 .data = &sysctl_sctp_mem, 238 .maxlen = sizeof(sysctl_sctp_mem), 239 .mode = 0644, 240 .proc_handler = proc_dointvec, 241 }, 242 { 243 .ctl_name = CTL_UNNUMBERED, 244 .procname = "sctp_rmem", 245 .data = &sysctl_sctp_rmem, 246 .maxlen = sizeof(sysctl_sctp_rmem), 247 .mode = 0644, 248 .proc_handler = proc_dointvec, 249 }, 250 { 251 .ctl_name = CTL_UNNUMBERED, 252 .procname = "sctp_wmem", 253 .data = &sysctl_sctp_wmem, 254 .maxlen = sizeof(sysctl_sctp_wmem), 255 .mode = 0644, 256 .proc_handler = proc_dointvec, 257 }, 258 { 259 .ctl_name = CTL_UNNUMBERED, 260 .procname = "auth_enable", 261 .data = &sctp_auth_enable, 262 .maxlen = sizeof(int), 263 .mode = 0644, 264 .proc_handler = proc_dointvec, 265 .strategy = sysctl_intvec 266 }, 267 { 268 .ctl_name = CTL_UNNUMBERED, 269 .procname = "addip_noauth_enable", 270 .data = &sctp_addip_noauth, 271 .maxlen = sizeof(int), 272 .mode = 0644, 273 .proc_handler = proc_dointvec, 274 .strategy = sysctl_intvec 275 }, 276 { 277 .ctl_name = CTL_UNNUMBERED, 278 .procname = "addr_scope_policy", 279 .data = &sctp_scope_policy, 280 .maxlen = sizeof(int), 281 .mode = 0644, 282 .proc_handler = &proc_dointvec_minmax, 283 .strategy = &sysctl_intvec, 284 .extra1 = &zero, 285 .extra2 = &addr_scope_max, 286 }, 287 { .ctl_name = 0 } 288 }; 289 290 static struct ctl_path sctp_path[] = { 291 { .procname = "net", .ctl_name = CTL_NET, }, 292 { .procname = "sctp", .ctl_name = NET_SCTP, }, 293 { } 294 }; 295 296 static struct ctl_table_header * sctp_sysctl_header; 297 298 /* Sysctl registration. */ 299 void sctp_sysctl_register(void) 300 { 301 sctp_sysctl_header = register_sysctl_paths(sctp_path, sctp_table); 302 } 303 304 /* Sysctl deregistration. */ 305 void sctp_sysctl_unregister(void) 306 { 307 unregister_sysctl_table(sctp_sysctl_header); 308 } 309