xref: /openbmc/linux/net/sctp/sysctl.c (revision 90f2f531)
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