160c778b2SVlad Yasevich /* SCTP kernel implementation 21da177e4SLinus Torvalds * (C) Copyright IBM Corp. 2002, 2004 31da177e4SLinus Torvalds * Copyright (c) 2002 Intel Corp. 41da177e4SLinus Torvalds * 560c778b2SVlad Yasevich * This file is part of the SCTP kernel implementation 61da177e4SLinus Torvalds * 71da177e4SLinus Torvalds * Sysctl related interfaces for SCTP. 81da177e4SLinus Torvalds * 960c778b2SVlad Yasevich * This SCTP implementation is free software; 101da177e4SLinus Torvalds * you can redistribute it and/or modify it under the terms of 111da177e4SLinus Torvalds * the GNU General Public License as published by 121da177e4SLinus Torvalds * the Free Software Foundation; either version 2, or (at your option) 131da177e4SLinus Torvalds * any later version. 141da177e4SLinus Torvalds * 1560c778b2SVlad Yasevich * This SCTP implementation is distributed in the hope that it 161da177e4SLinus Torvalds * will be useful, but WITHOUT ANY WARRANTY; without even the implied 171da177e4SLinus Torvalds * ************************ 181da177e4SLinus Torvalds * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 191da177e4SLinus Torvalds * See the GNU General Public License for more details. 201da177e4SLinus Torvalds * 211da177e4SLinus Torvalds * You should have received a copy of the GNU General Public License 221da177e4SLinus Torvalds * along with GNU CC; see the file COPYING. If not, write to 231da177e4SLinus Torvalds * the Free Software Foundation, 59 Temple Place - Suite 330, 241da177e4SLinus Torvalds * Boston, MA 02111-1307, USA. 251da177e4SLinus Torvalds * 261da177e4SLinus Torvalds * Please send any bug reports or fixes you make to the 271da177e4SLinus Torvalds * email address(es): 281da177e4SLinus Torvalds * lksctp developers <lksctp-developers@lists.sourceforge.net> 291da177e4SLinus Torvalds * 301da177e4SLinus Torvalds * Or submit a bug report through the following website: 311da177e4SLinus Torvalds * http://www.sf.net/projects/lksctp 321da177e4SLinus Torvalds * 331da177e4SLinus Torvalds * Written or modified by: 341da177e4SLinus Torvalds * Mingqin Liu <liuming@us.ibm.com> 351da177e4SLinus Torvalds * Jon Grimm <jgrimm@us.ibm.com> 361da177e4SLinus Torvalds * Ardelle Fan <ardelle.fan@intel.com> 371da177e4SLinus Torvalds * Ryan Layer <rmlayer@us.ibm.com> 381da177e4SLinus Torvalds * Sridhar Samudrala <sri@us.ibm.com> 391da177e4SLinus Torvalds * 401da177e4SLinus Torvalds * Any bugs reported given to us we will try to fix... any fixes shared will 411da177e4SLinus Torvalds * be incorporated into the next SCTP release. 421da177e4SLinus Torvalds */ 431da177e4SLinus Torvalds 441da177e4SLinus Torvalds #include <net/sctp/structs.h> 458c5955d8SAdrian Bunk #include <net/sctp/sctp.h> 461da177e4SLinus Torvalds #include <linux/sysctl.h> 471da177e4SLinus Torvalds 483fd091e7SVladislav Yasevich static int zero = 0; 493fd091e7SVladislav Yasevich static int one = 1; 503fd091e7SVladislav Yasevich static int timer_max = 86400000; /* ms in one day */ 513fd091e7SVladislav Yasevich static int int_max = INT_MAX; 52d48e074dSJean-Mickael Guerin static int sack_timer_min = 1; 53d48e074dSJean-Mickael Guerin static int sack_timer_max = 500; 5472388433SBhaskar Dutta static int addr_scope_max = 3; /* check sctp_scope_policy_t in include/net/sctp/constants.h for max entries */ 5590f2f531SVlad Yasevich static int rwnd_scale_max = 16; 561da177e4SLinus Torvalds 57007e3936SVlad Yasevich extern int sysctl_sctp_mem[3]; 58007e3936SVlad Yasevich extern int sysctl_sctp_rmem[3]; 59007e3936SVlad Yasevich extern int sysctl_sctp_wmem[3]; 604d93df0aSNeil Horman 611da177e4SLinus Torvalds static ctl_table sctp_table[] = { 621da177e4SLinus Torvalds { 631da177e4SLinus Torvalds .ctl_name = NET_SCTP_RTO_INITIAL, 641da177e4SLinus Torvalds .procname = "rto_initial", 651da177e4SLinus Torvalds .data = &sctp_rto_initial, 663fd091e7SVladislav Yasevich .maxlen = sizeof(unsigned int), 671da177e4SLinus Torvalds .mode = 0644, 686d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_minmax, 696d9f239aSAlexey Dobriyan .strategy = sysctl_intvec, 703fd091e7SVladislav Yasevich .extra1 = &one, 713fd091e7SVladislav Yasevich .extra2 = &timer_max 721da177e4SLinus Torvalds }, 731da177e4SLinus Torvalds { 741da177e4SLinus Torvalds .ctl_name = NET_SCTP_RTO_MIN, 751da177e4SLinus Torvalds .procname = "rto_min", 761da177e4SLinus Torvalds .data = &sctp_rto_min, 773fd091e7SVladislav Yasevich .maxlen = sizeof(unsigned int), 781da177e4SLinus Torvalds .mode = 0644, 796d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_minmax, 806d9f239aSAlexey Dobriyan .strategy = sysctl_intvec, 813fd091e7SVladislav Yasevich .extra1 = &one, 823fd091e7SVladislav Yasevich .extra2 = &timer_max 831da177e4SLinus Torvalds }, 841da177e4SLinus Torvalds { 851da177e4SLinus Torvalds .ctl_name = NET_SCTP_RTO_MAX, 861da177e4SLinus Torvalds .procname = "rto_max", 871da177e4SLinus Torvalds .data = &sctp_rto_max, 883fd091e7SVladislav Yasevich .maxlen = sizeof(unsigned int), 891da177e4SLinus Torvalds .mode = 0644, 906d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_minmax, 916d9f239aSAlexey Dobriyan .strategy = sysctl_intvec, 923fd091e7SVladislav Yasevich .extra1 = &one, 933fd091e7SVladislav Yasevich .extra2 = &timer_max 941da177e4SLinus Torvalds }, 951da177e4SLinus Torvalds { 961da177e4SLinus Torvalds .ctl_name = NET_SCTP_VALID_COOKIE_LIFE, 971da177e4SLinus Torvalds .procname = "valid_cookie_life", 981da177e4SLinus Torvalds .data = &sctp_valid_cookie_life, 993fd091e7SVladislav Yasevich .maxlen = sizeof(unsigned int), 1001da177e4SLinus Torvalds .mode = 0644, 1016d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_minmax, 1026d9f239aSAlexey Dobriyan .strategy = sysctl_intvec, 1033fd091e7SVladislav Yasevich .extra1 = &one, 1043fd091e7SVladislav Yasevich .extra2 = &timer_max 1051da177e4SLinus Torvalds }, 1061da177e4SLinus Torvalds { 1071da177e4SLinus Torvalds .ctl_name = NET_SCTP_MAX_BURST, 1081da177e4SLinus Torvalds .procname = "max_burst", 1091da177e4SLinus Torvalds .data = &sctp_max_burst, 1101da177e4SLinus Torvalds .maxlen = sizeof(int), 1111da177e4SLinus Torvalds .mode = 0644, 1126d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_minmax, 1136d9f239aSAlexey Dobriyan .strategy = sysctl_intvec, 1143fd091e7SVladislav Yasevich .extra1 = &zero, 1153fd091e7SVladislav Yasevich .extra2 = &int_max 1161da177e4SLinus Torvalds }, 1171da177e4SLinus Torvalds { 1181da177e4SLinus Torvalds .ctl_name = NET_SCTP_ASSOCIATION_MAX_RETRANS, 1191da177e4SLinus Torvalds .procname = "association_max_retrans", 1201da177e4SLinus Torvalds .data = &sctp_max_retrans_association, 1211da177e4SLinus Torvalds .maxlen = sizeof(int), 1221da177e4SLinus Torvalds .mode = 0644, 1236d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_minmax, 1246d9f239aSAlexey Dobriyan .strategy = sysctl_intvec, 1253fd091e7SVladislav Yasevich .extra1 = &one, 1263fd091e7SVladislav Yasevich .extra2 = &int_max 1271da177e4SLinus Torvalds }, 1281da177e4SLinus Torvalds { 1294eb701dfSNeil Horman .ctl_name = NET_SCTP_SNDBUF_POLICY, 1304eb701dfSNeil Horman .procname = "sndbuf_policy", 1314eb701dfSNeil Horman .data = &sctp_sndbuf_policy, 1324eb701dfSNeil Horman .maxlen = sizeof(int), 1334eb701dfSNeil Horman .mode = 0644, 1346d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 1356d9f239aSAlexey Dobriyan .strategy = sysctl_intvec 1364eb701dfSNeil Horman }, 1374eb701dfSNeil Horman { 138049b3ff5SNeil Horman .ctl_name = NET_SCTP_RCVBUF_POLICY, 139049b3ff5SNeil Horman .procname = "rcvbuf_policy", 140049b3ff5SNeil Horman .data = &sctp_rcvbuf_policy, 141049b3ff5SNeil Horman .maxlen = sizeof(int), 142049b3ff5SNeil Horman .mode = 0644, 1436d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 1446d9f239aSAlexey Dobriyan .strategy = sysctl_intvec 145049b3ff5SNeil Horman }, 146049b3ff5SNeil Horman { 1471da177e4SLinus Torvalds .ctl_name = NET_SCTP_PATH_MAX_RETRANS, 1481da177e4SLinus Torvalds .procname = "path_max_retrans", 1491da177e4SLinus Torvalds .data = &sctp_max_retrans_path, 1501da177e4SLinus Torvalds .maxlen = sizeof(int), 1511da177e4SLinus Torvalds .mode = 0644, 1526d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_minmax, 1536d9f239aSAlexey Dobriyan .strategy = sysctl_intvec, 1543fd091e7SVladislav Yasevich .extra1 = &one, 1553fd091e7SVladislav Yasevich .extra2 = &int_max 1561da177e4SLinus Torvalds }, 1571da177e4SLinus Torvalds { 1581da177e4SLinus Torvalds .ctl_name = NET_SCTP_MAX_INIT_RETRANSMITS, 1591da177e4SLinus Torvalds .procname = "max_init_retransmits", 1601da177e4SLinus Torvalds .data = &sctp_max_retrans_init, 1611da177e4SLinus Torvalds .maxlen = sizeof(int), 1621da177e4SLinus Torvalds .mode = 0644, 1636d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_minmax, 1646d9f239aSAlexey Dobriyan .strategy = sysctl_intvec, 1653fd091e7SVladislav Yasevich .extra1 = &one, 1663fd091e7SVladislav Yasevich .extra2 = &int_max 1671da177e4SLinus Torvalds }, 1681da177e4SLinus Torvalds { 1691da177e4SLinus Torvalds .ctl_name = NET_SCTP_HB_INTERVAL, 1701da177e4SLinus Torvalds .procname = "hb_interval", 1711da177e4SLinus Torvalds .data = &sctp_hb_interval, 1723fd091e7SVladislav Yasevich .maxlen = sizeof(unsigned int), 1731da177e4SLinus Torvalds .mode = 0644, 1746d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_minmax, 1756d9f239aSAlexey Dobriyan .strategy = sysctl_intvec, 1763fd091e7SVladislav Yasevich .extra1 = &one, 1773fd091e7SVladislav Yasevich .extra2 = &timer_max 1781da177e4SLinus Torvalds }, 1791da177e4SLinus Torvalds { 1801da177e4SLinus Torvalds .ctl_name = NET_SCTP_PRESERVE_ENABLE, 1811da177e4SLinus Torvalds .procname = "cookie_preserve_enable", 1821da177e4SLinus Torvalds .data = &sctp_cookie_preserve_enable, 1838116ffadSVlad Yasevich .maxlen = sizeof(int), 1841da177e4SLinus Torvalds .mode = 0644, 1856d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 1866d9f239aSAlexey Dobriyan .strategy = sysctl_intvec 1871da177e4SLinus Torvalds }, 1881da177e4SLinus Torvalds { 1891da177e4SLinus Torvalds .ctl_name = NET_SCTP_RTO_ALPHA, 1901da177e4SLinus Torvalds .procname = "rto_alpha_exp_divisor", 1911da177e4SLinus Torvalds .data = &sctp_rto_alpha, 1921da177e4SLinus Torvalds .maxlen = sizeof(int), 1933fd091e7SVladislav Yasevich .mode = 0444, 1946d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 1956d9f239aSAlexey Dobriyan .strategy = sysctl_intvec 1961da177e4SLinus Torvalds }, 1971da177e4SLinus Torvalds { 1981da177e4SLinus Torvalds .ctl_name = NET_SCTP_RTO_BETA, 1991da177e4SLinus Torvalds .procname = "rto_beta_exp_divisor", 2001da177e4SLinus Torvalds .data = &sctp_rto_beta, 2011da177e4SLinus Torvalds .maxlen = sizeof(int), 2023fd091e7SVladislav Yasevich .mode = 0444, 2036d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 2046d9f239aSAlexey Dobriyan .strategy = sysctl_intvec 2051da177e4SLinus Torvalds }, 2061da177e4SLinus Torvalds { 2071da177e4SLinus Torvalds .ctl_name = NET_SCTP_ADDIP_ENABLE, 2081da177e4SLinus Torvalds .procname = "addip_enable", 2091da177e4SLinus Torvalds .data = &sctp_addip_enable, 2101da177e4SLinus Torvalds .maxlen = sizeof(int), 2111da177e4SLinus Torvalds .mode = 0644, 2126d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 2136d9f239aSAlexey Dobriyan .strategy = sysctl_intvec 2141da177e4SLinus Torvalds }, 2151da177e4SLinus Torvalds { 2161da177e4SLinus Torvalds .ctl_name = NET_SCTP_PRSCTP_ENABLE, 2171da177e4SLinus Torvalds .procname = "prsctp_enable", 2181da177e4SLinus Torvalds .data = &sctp_prsctp_enable, 2191da177e4SLinus Torvalds .maxlen = sizeof(int), 2201da177e4SLinus Torvalds .mode = 0644, 2216d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 2226d9f239aSAlexey Dobriyan .strategy = sysctl_intvec 2231da177e4SLinus Torvalds }, 2242f85a429SVlad Yasevich { 2252f85a429SVlad Yasevich .ctl_name = NET_SCTP_SACK_TIMEOUT, 2262f85a429SVlad Yasevich .procname = "sack_timeout", 2272f85a429SVlad Yasevich .data = &sctp_sack_timeout, 228d48e074dSJean-Mickael Guerin .maxlen = sizeof(int), 2292f85a429SVlad Yasevich .mode = 0644, 2306d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_minmax, 2316d9f239aSAlexey Dobriyan .strategy = sysctl_intvec, 2322f85a429SVlad Yasevich .extra1 = &sack_timer_min, 2332f85a429SVlad Yasevich .extra2 = &sack_timer_max, 2342f85a429SVlad Yasevich }, 2354d93df0aSNeil Horman { 2364d93df0aSNeil Horman .ctl_name = CTL_UNNUMBERED, 2374d93df0aSNeil Horman .procname = "sctp_mem", 2384d93df0aSNeil Horman .data = &sysctl_sctp_mem, 2394d93df0aSNeil Horman .maxlen = sizeof(sysctl_sctp_mem), 2404d93df0aSNeil Horman .mode = 0644, 2416d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 2424d93df0aSNeil Horman }, 2434d93df0aSNeil Horman { 2444d93df0aSNeil Horman .ctl_name = CTL_UNNUMBERED, 2454d93df0aSNeil Horman .procname = "sctp_rmem", 2464d93df0aSNeil Horman .data = &sysctl_sctp_rmem, 2474d93df0aSNeil Horman .maxlen = sizeof(sysctl_sctp_rmem), 2484d93df0aSNeil Horman .mode = 0644, 2496d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 2504d93df0aSNeil Horman }, 2514d93df0aSNeil Horman { 2524d93df0aSNeil Horman .ctl_name = CTL_UNNUMBERED, 2534d93df0aSNeil Horman .procname = "sctp_wmem", 2544d93df0aSNeil Horman .data = &sysctl_sctp_wmem, 2554d93df0aSNeil Horman .maxlen = sizeof(sysctl_sctp_wmem), 2564d93df0aSNeil Horman .mode = 0644, 2576d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 2584d93df0aSNeil Horman }, 259a29a5bd4SVlad Yasevich { 260a29a5bd4SVlad Yasevich .ctl_name = CTL_UNNUMBERED, 261a29a5bd4SVlad Yasevich .procname = "auth_enable", 262a29a5bd4SVlad Yasevich .data = &sctp_auth_enable, 263a29a5bd4SVlad Yasevich .maxlen = sizeof(int), 264a29a5bd4SVlad Yasevich .mode = 0644, 2656d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 2666d9f239aSAlexey Dobriyan .strategy = sysctl_intvec 267a29a5bd4SVlad Yasevich }, 26873d9c4fdSVlad Yasevich { 26973d9c4fdSVlad Yasevich .ctl_name = CTL_UNNUMBERED, 27073d9c4fdSVlad Yasevich .procname = "addip_noauth_enable", 27173d9c4fdSVlad Yasevich .data = &sctp_addip_noauth, 27273d9c4fdSVlad Yasevich .maxlen = sizeof(int), 27373d9c4fdSVlad Yasevich .mode = 0644, 2746d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 2756d9f239aSAlexey Dobriyan .strategy = sysctl_intvec 27673d9c4fdSVlad Yasevich }, 27772388433SBhaskar Dutta { 27872388433SBhaskar Dutta .ctl_name = CTL_UNNUMBERED, 27972388433SBhaskar Dutta .procname = "addr_scope_policy", 28072388433SBhaskar Dutta .data = &sctp_scope_policy, 28172388433SBhaskar Dutta .maxlen = sizeof(int), 28272388433SBhaskar Dutta .mode = 0644, 28372388433SBhaskar Dutta .proc_handler = &proc_dointvec_minmax, 28472388433SBhaskar Dutta .strategy = &sysctl_intvec, 28572388433SBhaskar Dutta .extra1 = &zero, 28672388433SBhaskar Dutta .extra2 = &addr_scope_max, 28772388433SBhaskar Dutta }, 28890f2f531SVlad Yasevich { 28990f2f531SVlad Yasevich .ctl_name = CTL_UNNUMBERED, 29090f2f531SVlad Yasevich .procname = "rwnd_update_shift", 29190f2f531SVlad Yasevich .data = &sctp_rwnd_upd_shift, 29290f2f531SVlad Yasevich .maxlen = sizeof(int), 29390f2f531SVlad Yasevich .mode = 0644, 29490f2f531SVlad Yasevich .proc_handler = &proc_dointvec_minmax, 29590f2f531SVlad Yasevich .strategy = &sysctl_intvec, 29690f2f531SVlad Yasevich .extra1 = &one, 29790f2f531SVlad Yasevich .extra2 = &rwnd_scale_max, 29890f2f531SVlad Yasevich }, 29990f2f531SVlad Yasevich 3001da177e4SLinus Torvalds { .ctl_name = 0 } 3011da177e4SLinus Torvalds }; 3021da177e4SLinus Torvalds 303b5ccd792SPavel Emelyanov static struct ctl_path sctp_path[] = { 304b5ccd792SPavel Emelyanov { .procname = "net", .ctl_name = CTL_NET, }, 305b5ccd792SPavel Emelyanov { .procname = "sctp", .ctl_name = NET_SCTP, }, 306b5ccd792SPavel Emelyanov { } 3071da177e4SLinus Torvalds }; 3081da177e4SLinus Torvalds 3091da177e4SLinus Torvalds static struct ctl_table_header * sctp_sysctl_header; 3101da177e4SLinus Torvalds 3111da177e4SLinus Torvalds /* Sysctl registration. */ 3121da177e4SLinus Torvalds void sctp_sysctl_register(void) 3131da177e4SLinus Torvalds { 314b5ccd792SPavel Emelyanov sctp_sysctl_header = register_sysctl_paths(sctp_path, sctp_table); 3151da177e4SLinus Torvalds } 3161da177e4SLinus Torvalds 3171da177e4SLinus Torvalds /* Sysctl deregistration. */ 3181da177e4SLinus Torvalds void sctp_sysctl_unregister(void) 3191da177e4SLinus Torvalds { 3201da177e4SLinus Torvalds unregister_sysctl_table(sctp_sysctl_header); 3211da177e4SLinus Torvalds } 322