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; 562692ba61SXi Wang static unsigned long max_autoclose_min = 0; 572692ba61SXi Wang static unsigned long max_autoclose_max = 582692ba61SXi Wang (MAX_SCHEDULE_TIMEOUT / HZ > UINT_MAX) 592692ba61SXi Wang ? UINT_MAX : MAX_SCHEDULE_TIMEOUT / HZ; 601da177e4SLinus Torvalds 618d987e5cSEric Dumazet extern long sysctl_sctp_mem[3]; 62007e3936SVlad Yasevich extern int sysctl_sctp_rmem[3]; 63007e3936SVlad Yasevich extern int sysctl_sctp_wmem[3]; 644d93df0aSNeil Horman 651da177e4SLinus Torvalds static ctl_table sctp_table[] = { 661da177e4SLinus Torvalds { 671da177e4SLinus Torvalds .procname = "rto_initial", 681da177e4SLinus Torvalds .data = &sctp_rto_initial, 693fd091e7SVladislav Yasevich .maxlen = sizeof(unsigned int), 701da177e4SLinus Torvalds .mode = 0644, 716d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_minmax, 723fd091e7SVladislav Yasevich .extra1 = &one, 733fd091e7SVladislav Yasevich .extra2 = &timer_max 741da177e4SLinus Torvalds }, 751da177e4SLinus Torvalds { 761da177e4SLinus Torvalds .procname = "rto_min", 771da177e4SLinus Torvalds .data = &sctp_rto_min, 783fd091e7SVladislav Yasevich .maxlen = sizeof(unsigned int), 791da177e4SLinus Torvalds .mode = 0644, 806d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_minmax, 813fd091e7SVladislav Yasevich .extra1 = &one, 823fd091e7SVladislav Yasevich .extra2 = &timer_max 831da177e4SLinus Torvalds }, 841da177e4SLinus Torvalds { 851da177e4SLinus Torvalds .procname = "rto_max", 861da177e4SLinus Torvalds .data = &sctp_rto_max, 873fd091e7SVladislav Yasevich .maxlen = sizeof(unsigned int), 881da177e4SLinus Torvalds .mode = 0644, 896d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_minmax, 903fd091e7SVladislav Yasevich .extra1 = &one, 913fd091e7SVladislav Yasevich .extra2 = &timer_max 921da177e4SLinus Torvalds }, 931da177e4SLinus Torvalds { 941da177e4SLinus Torvalds .procname = "valid_cookie_life", 951da177e4SLinus Torvalds .data = &sctp_valid_cookie_life, 963fd091e7SVladislav Yasevich .maxlen = sizeof(unsigned int), 971da177e4SLinus Torvalds .mode = 0644, 986d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_minmax, 993fd091e7SVladislav Yasevich .extra1 = &one, 1003fd091e7SVladislav Yasevich .extra2 = &timer_max 1011da177e4SLinus Torvalds }, 1021da177e4SLinus Torvalds { 1031da177e4SLinus Torvalds .procname = "max_burst", 1041da177e4SLinus Torvalds .data = &sctp_max_burst, 1051da177e4SLinus Torvalds .maxlen = sizeof(int), 1061da177e4SLinus Torvalds .mode = 0644, 1076d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_minmax, 1083fd091e7SVladislav Yasevich .extra1 = &zero, 1093fd091e7SVladislav Yasevich .extra2 = &int_max 1101da177e4SLinus Torvalds }, 1111da177e4SLinus Torvalds { 1121da177e4SLinus Torvalds .procname = "association_max_retrans", 1131da177e4SLinus Torvalds .data = &sctp_max_retrans_association, 1141da177e4SLinus Torvalds .maxlen = sizeof(int), 1151da177e4SLinus Torvalds .mode = 0644, 1166d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_minmax, 1173fd091e7SVladislav Yasevich .extra1 = &one, 1183fd091e7SVladislav Yasevich .extra2 = &int_max 1191da177e4SLinus Torvalds }, 1201da177e4SLinus Torvalds { 1214eb701dfSNeil Horman .procname = "sndbuf_policy", 1224eb701dfSNeil Horman .data = &sctp_sndbuf_policy, 1234eb701dfSNeil Horman .maxlen = sizeof(int), 1244eb701dfSNeil Horman .mode = 0644, 1256d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 1264eb701dfSNeil Horman }, 1274eb701dfSNeil Horman { 128049b3ff5SNeil Horman .procname = "rcvbuf_policy", 129049b3ff5SNeil Horman .data = &sctp_rcvbuf_policy, 130049b3ff5SNeil Horman .maxlen = sizeof(int), 131049b3ff5SNeil Horman .mode = 0644, 1326d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 133049b3ff5SNeil Horman }, 134049b3ff5SNeil Horman { 1351da177e4SLinus Torvalds .procname = "path_max_retrans", 1361da177e4SLinus Torvalds .data = &sctp_max_retrans_path, 1371da177e4SLinus Torvalds .maxlen = sizeof(int), 1381da177e4SLinus Torvalds .mode = 0644, 1396d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_minmax, 1403fd091e7SVladislav Yasevich .extra1 = &one, 1413fd091e7SVladislav Yasevich .extra2 = &int_max 1421da177e4SLinus Torvalds }, 1431da177e4SLinus Torvalds { 1445aa93bcfSNeil Horman .procname = "pf_retrans", 1455aa93bcfSNeil Horman .data = &sctp_pf_retrans, 1465aa93bcfSNeil Horman .maxlen = sizeof(int), 1475aa93bcfSNeil Horman .mode = 0644, 1485aa93bcfSNeil Horman .proc_handler = proc_dointvec_minmax, 1495aa93bcfSNeil Horman .extra1 = &zero, 1505aa93bcfSNeil Horman .extra2 = &int_max 1515aa93bcfSNeil Horman }, 1525aa93bcfSNeil Horman { 1531da177e4SLinus Torvalds .procname = "max_init_retransmits", 1541da177e4SLinus Torvalds .data = &sctp_max_retrans_init, 1551da177e4SLinus Torvalds .maxlen = sizeof(int), 1561da177e4SLinus Torvalds .mode = 0644, 1576d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_minmax, 1583fd091e7SVladislav Yasevich .extra1 = &one, 1593fd091e7SVladislav Yasevich .extra2 = &int_max 1601da177e4SLinus Torvalds }, 1611da177e4SLinus Torvalds { 1621da177e4SLinus Torvalds .procname = "hb_interval", 1631da177e4SLinus Torvalds .data = &sctp_hb_interval, 1643fd091e7SVladislav Yasevich .maxlen = sizeof(unsigned int), 1651da177e4SLinus Torvalds .mode = 0644, 1666d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_minmax, 1673fd091e7SVladislav Yasevich .extra1 = &one, 1683fd091e7SVladislav Yasevich .extra2 = &timer_max 1691da177e4SLinus Torvalds }, 1701da177e4SLinus Torvalds { 1711da177e4SLinus Torvalds .procname = "cookie_preserve_enable", 1721da177e4SLinus Torvalds .data = &sctp_cookie_preserve_enable, 1738116ffadSVlad Yasevich .maxlen = sizeof(int), 1741da177e4SLinus Torvalds .mode = 0644, 1756d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 1761da177e4SLinus Torvalds }, 1771da177e4SLinus Torvalds { 1781da177e4SLinus Torvalds .procname = "rto_alpha_exp_divisor", 1791da177e4SLinus Torvalds .data = &sctp_rto_alpha, 1801da177e4SLinus Torvalds .maxlen = sizeof(int), 1813fd091e7SVladislav Yasevich .mode = 0444, 1826d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 1831da177e4SLinus Torvalds }, 1841da177e4SLinus Torvalds { 1851da177e4SLinus Torvalds .procname = "rto_beta_exp_divisor", 1861da177e4SLinus Torvalds .data = &sctp_rto_beta, 1871da177e4SLinus Torvalds .maxlen = sizeof(int), 1883fd091e7SVladislav Yasevich .mode = 0444, 1896d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 1901da177e4SLinus Torvalds }, 1911da177e4SLinus Torvalds { 1921da177e4SLinus Torvalds .procname = "addip_enable", 1931da177e4SLinus Torvalds .data = &sctp_addip_enable, 1941da177e4SLinus Torvalds .maxlen = sizeof(int), 1951da177e4SLinus Torvalds .mode = 0644, 1966d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 1971da177e4SLinus Torvalds }, 1981da177e4SLinus Torvalds { 199dd51be0fSMichio Honda .procname = "default_auto_asconf", 200dd51be0fSMichio Honda .data = &sctp_default_auto_asconf, 201dd51be0fSMichio Honda .maxlen = sizeof(int), 202dd51be0fSMichio Honda .mode = 0644, 203dd51be0fSMichio Honda .proc_handler = proc_dointvec, 204dd51be0fSMichio Honda }, 205dd51be0fSMichio Honda { 2061da177e4SLinus Torvalds .procname = "prsctp_enable", 2071da177e4SLinus Torvalds .data = &sctp_prsctp_enable, 2081da177e4SLinus Torvalds .maxlen = sizeof(int), 2091da177e4SLinus Torvalds .mode = 0644, 2106d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 2111da177e4SLinus Torvalds }, 2122f85a429SVlad Yasevich { 2132f85a429SVlad Yasevich .procname = "sack_timeout", 2142f85a429SVlad Yasevich .data = &sctp_sack_timeout, 215d48e074dSJean-Mickael Guerin .maxlen = sizeof(int), 2162f85a429SVlad Yasevich .mode = 0644, 2176d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec_minmax, 2182f85a429SVlad Yasevich .extra1 = &sack_timer_min, 2192f85a429SVlad Yasevich .extra2 = &sack_timer_max, 2202f85a429SVlad Yasevich }, 2214d93df0aSNeil Horman { 2224d93df0aSNeil Horman .procname = "sctp_mem", 2234d93df0aSNeil Horman .data = &sysctl_sctp_mem, 2244d93df0aSNeil Horman .maxlen = sizeof(sysctl_sctp_mem), 2254d93df0aSNeil Horman .mode = 0644, 2268d987e5cSEric Dumazet .proc_handler = proc_doulongvec_minmax 2274d93df0aSNeil Horman }, 2284d93df0aSNeil Horman { 2294d93df0aSNeil Horman .procname = "sctp_rmem", 2304d93df0aSNeil Horman .data = &sysctl_sctp_rmem, 2314d93df0aSNeil Horman .maxlen = sizeof(sysctl_sctp_rmem), 2324d93df0aSNeil Horman .mode = 0644, 2336d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 2344d93df0aSNeil Horman }, 2354d93df0aSNeil Horman { 2364d93df0aSNeil Horman .procname = "sctp_wmem", 2374d93df0aSNeil Horman .data = &sysctl_sctp_wmem, 2384d93df0aSNeil Horman .maxlen = sizeof(sysctl_sctp_wmem), 2394d93df0aSNeil Horman .mode = 0644, 2406d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 2414d93df0aSNeil Horman }, 242a29a5bd4SVlad Yasevich { 243a29a5bd4SVlad Yasevich .procname = "auth_enable", 244a29a5bd4SVlad Yasevich .data = &sctp_auth_enable, 245a29a5bd4SVlad Yasevich .maxlen = sizeof(int), 246a29a5bd4SVlad Yasevich .mode = 0644, 2476d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 248a29a5bd4SVlad Yasevich }, 24973d9c4fdSVlad Yasevich { 25073d9c4fdSVlad Yasevich .procname = "addip_noauth_enable", 25173d9c4fdSVlad Yasevich .data = &sctp_addip_noauth, 25273d9c4fdSVlad Yasevich .maxlen = sizeof(int), 25373d9c4fdSVlad Yasevich .mode = 0644, 2546d9f239aSAlexey Dobriyan .proc_handler = proc_dointvec, 25573d9c4fdSVlad Yasevich }, 25672388433SBhaskar Dutta { 25772388433SBhaskar Dutta .procname = "addr_scope_policy", 25872388433SBhaskar Dutta .data = &sctp_scope_policy, 25972388433SBhaskar Dutta .maxlen = sizeof(int), 26072388433SBhaskar Dutta .mode = 0644, 2616d456111SEric W. Biederman .proc_handler = proc_dointvec_minmax, 26272388433SBhaskar Dutta .extra1 = &zero, 26372388433SBhaskar Dutta .extra2 = &addr_scope_max, 26472388433SBhaskar Dutta }, 26590f2f531SVlad Yasevich { 26690f2f531SVlad Yasevich .procname = "rwnd_update_shift", 26790f2f531SVlad Yasevich .data = &sctp_rwnd_upd_shift, 26890f2f531SVlad Yasevich .maxlen = sizeof(int), 26990f2f531SVlad Yasevich .mode = 0644, 27090f2f531SVlad Yasevich .proc_handler = &proc_dointvec_minmax, 27190f2f531SVlad Yasevich .extra1 = &one, 27290f2f531SVlad Yasevich .extra2 = &rwnd_scale_max, 27390f2f531SVlad Yasevich }, 2742692ba61SXi Wang { 2752692ba61SXi Wang .procname = "max_autoclose", 2762692ba61SXi Wang .data = &sctp_max_autoclose, 2772692ba61SXi Wang .maxlen = sizeof(unsigned long), 2782692ba61SXi Wang .mode = 0644, 2792692ba61SXi Wang .proc_handler = &proc_doulongvec_minmax, 2802692ba61SXi Wang .extra1 = &max_autoclose_min, 2812692ba61SXi Wang .extra2 = &max_autoclose_max, 2822692ba61SXi Wang }, 28390f2f531SVlad Yasevich 284d7fc02c7SLinus Torvalds { /* sentinel */ } 2851da177e4SLinus Torvalds }; 2861da177e4SLinus Torvalds 287ebb7e95dSEric W. Biederman static ctl_table sctp_net_table[] = { 288ebb7e95dSEric W. Biederman { /* sentinel */ } 289ebb7e95dSEric W. Biederman }; 290ebb7e95dSEric W. Biederman 291ebb7e95dSEric W. Biederman int sctp_sysctl_net_register(struct net *net) 292ebb7e95dSEric W. Biederman { 293ebb7e95dSEric W. Biederman struct ctl_table *table; 294ebb7e95dSEric W. Biederman 295ebb7e95dSEric W. Biederman table = kmemdup(sctp_net_table, sizeof(sctp_net_table), GFP_KERNEL); 296ebb7e95dSEric W. Biederman if (!table) 297ebb7e95dSEric W. Biederman return -ENOMEM; 298ebb7e95dSEric W. Biederman 299ebb7e95dSEric W. Biederman net->sctp.sysctl_header = register_net_sysctl(net, "net/sctp", table); 300ebb7e95dSEric W. Biederman return 0; 301ebb7e95dSEric W. Biederman } 302ebb7e95dSEric W. Biederman 303ebb7e95dSEric W. Biederman void sctp_sysctl_net_unregister(struct net *net) 304ebb7e95dSEric W. Biederman { 305ebb7e95dSEric W. Biederman unregister_net_sysctl_table(net->sctp.sysctl_header); 306ebb7e95dSEric W. Biederman } 307ebb7e95dSEric W. Biederman 3081da177e4SLinus Torvalds static struct ctl_table_header * sctp_sysctl_header; 3091da177e4SLinus Torvalds 3101da177e4SLinus Torvalds /* Sysctl registration. */ 3111da177e4SLinus Torvalds void sctp_sysctl_register(void) 3121da177e4SLinus Torvalds { 313ec8f23ceSEric W. Biederman sctp_sysctl_header = register_net_sysctl(&init_net, "net/sctp", sctp_table); 3141da177e4SLinus Torvalds } 3151da177e4SLinus Torvalds 3161da177e4SLinus Torvalds /* Sysctl deregistration. */ 3171da177e4SLinus Torvalds void sctp_sysctl_unregister(void) 3181da177e4SLinus Torvalds { 3195dd3df10SEric W. Biederman unregister_net_sysctl_table(sctp_sysctl_header); 3201da177e4SLinus Torvalds } 321