| 
									
										
										
										
											2006-03-20 19:25:02 -08:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  *  net/dccp/sysctl.c | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  An implementation of the DCCP protocol | 
					
						
							|  |  |  |  *  Arnaldo Carvalho de Melo <acme@mandriva.com> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *	This program is free software; you can redistribute it and/or | 
					
						
							|  |  |  |  *	modify it under the terms of the GNU General Public License v2 | 
					
						
							|  |  |  |  *	as published by the Free Software Foundation. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <linux/mm.h>
 | 
					
						
							|  |  |  | #include <linux/sysctl.h>
 | 
					
						
							| 
									
										
										
										
											2006-11-13 13:23:52 -02:00
										 |  |  | #include "dccp.h"
 | 
					
						
							| 
									
										
										
										
											2006-08-26 19:15:35 -07:00
										 |  |  | #include "feat.h"
 | 
					
						
							| 
									
										
										
										
											2006-03-20 19:25:02 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifndef CONFIG_SYSCTL
 | 
					
						
							|  |  |  | #error This file should not be compiled without CONFIG_SYSCTL defined
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-16 23:36:32 +00:00
										 |  |  | /* Boundary values */ | 
					
						
							|  |  |  | static int		zero     = 0, | 
					
						
							| 
									
										
										
										
											2014-05-13 10:57:58 +08:00
										 |  |  | 			one      = 1, | 
					
						
							| 
									
										
										
										
											2009-01-16 23:36:32 +00:00
										 |  |  | 			u8_max   = 0xFF; | 
					
						
							| 
									
										
										
										
											2011-01-02 18:15:58 +01:00
										 |  |  | static unsigned long	seqw_min = DCCPF_SEQ_WMIN, | 
					
						
							|  |  |  | 			seqw_max = 0xFFFFFFFF;		/* maximum on 32 bit */ | 
					
						
							| 
									
										
										
										
											2009-01-16 23:36:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-03-20 19:25:02 -08:00
										 |  |  | static struct ctl_table dccp_default_table[] = { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		.procname	= "seq_window", | 
					
						
							| 
									
										
										
										
											2009-01-16 23:36:32 +00:00
										 |  |  | 		.data		= &sysctl_dccp_sequence_window, | 
					
						
							|  |  |  | 		.maxlen		= sizeof(sysctl_dccp_sequence_window), | 
					
						
							| 
									
										
										
										
											2006-03-20 19:25:02 -08:00
										 |  |  | 		.mode		= 0644, | 
					
						
							| 
									
										
										
										
											2009-01-16 23:36:32 +00:00
										 |  |  | 		.proc_handler	= proc_doulongvec_minmax, | 
					
						
							|  |  |  | 		.extra1		= &seqw_min,		/* RFC 4340, 7.5.2 */ | 
					
						
							| 
									
										
										
										
											2011-01-02 18:15:58 +01:00
										 |  |  | 		.extra2		= &seqw_max, | 
					
						
							| 
									
										
										
										
											2006-03-20 19:25:02 -08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		.procname	= "rx_ccid", | 
					
						
							| 
									
										
										
										
											2009-01-16 23:36:32 +00:00
										 |  |  | 		.data		= &sysctl_dccp_rx_ccid, | 
					
						
							|  |  |  | 		.maxlen		= sizeof(sysctl_dccp_rx_ccid), | 
					
						
							| 
									
										
										
										
											2006-03-20 19:25:02 -08:00
										 |  |  | 		.mode		= 0644, | 
					
						
							| 
									
										
										
										
											2009-01-16 23:36:32 +00:00
										 |  |  | 		.proc_handler	= proc_dointvec_minmax, | 
					
						
							|  |  |  | 		.extra1		= &zero, | 
					
						
							|  |  |  | 		.extra2		= &u8_max,		/* RFC 4340, 10. */ | 
					
						
							| 
									
										
										
										
											2006-03-20 19:25:02 -08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		.procname	= "tx_ccid", | 
					
						
							| 
									
										
										
										
											2009-01-16 23:36:32 +00:00
										 |  |  | 		.data		= &sysctl_dccp_tx_ccid, | 
					
						
							|  |  |  | 		.maxlen		= sizeof(sysctl_dccp_tx_ccid), | 
					
						
							| 
									
										
										
										
											2006-03-20 19:25:02 -08:00
										 |  |  | 		.mode		= 0644, | 
					
						
							| 
									
										
										
										
											2009-01-16 23:36:32 +00:00
										 |  |  | 		.proc_handler	= proc_dointvec_minmax, | 
					
						
							|  |  |  | 		.extra1		= &zero, | 
					
						
							|  |  |  | 		.extra2		= &u8_max,		/* RFC 4340, 10. */ | 
					
						
							| 
									
										
										
										
											2006-03-20 19:25:02 -08:00
										 |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2006-11-13 13:23:52 -02:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		.procname	= "request_retries", | 
					
						
							|  |  |  | 		.data		= &sysctl_dccp_request_retries, | 
					
						
							|  |  |  | 		.maxlen		= sizeof(sysctl_dccp_request_retries), | 
					
						
							|  |  |  | 		.mode		= 0644, | 
					
						
							| 
									
										
										
										
											2009-01-16 23:36:32 +00:00
										 |  |  | 		.proc_handler	= proc_dointvec_minmax, | 
					
						
							| 
									
										
										
										
											2014-05-13 10:57:58 +08:00
										 |  |  | 		.extra1		= &one, | 
					
						
							| 
									
										
										
										
											2009-01-16 23:36:32 +00:00
										 |  |  | 		.extra2		= &u8_max, | 
					
						
							| 
									
										
										
										
											2006-11-13 13:23:52 -02:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		.procname	= "retries1", | 
					
						
							|  |  |  | 		.data		= &sysctl_dccp_retries1, | 
					
						
							|  |  |  | 		.maxlen		= sizeof(sysctl_dccp_retries1), | 
					
						
							|  |  |  | 		.mode		= 0644, | 
					
						
							| 
									
										
										
										
											2009-01-16 23:36:32 +00:00
										 |  |  | 		.proc_handler	= proc_dointvec_minmax, | 
					
						
							|  |  |  | 		.extra1		= &zero, | 
					
						
							|  |  |  | 		.extra2		= &u8_max, | 
					
						
							| 
									
										
										
										
											2006-11-13 13:23:52 -02:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		.procname	= "retries2", | 
					
						
							|  |  |  | 		.data		= &sysctl_dccp_retries2, | 
					
						
							|  |  |  | 		.maxlen		= sizeof(sysctl_dccp_retries2), | 
					
						
							|  |  |  | 		.mode		= 0644, | 
					
						
							| 
									
										
										
										
											2009-01-16 23:36:32 +00:00
										 |  |  | 		.proc_handler	= proc_dointvec_minmax, | 
					
						
							|  |  |  | 		.extra1		= &zero, | 
					
						
							|  |  |  | 		.extra2		= &u8_max, | 
					
						
							| 
									
										
										
										
											2006-11-13 13:23:52 -02:00
										 |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2006-11-20 19:19:32 -02:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		.procname	= "tx_qlen", | 
					
						
							|  |  |  | 		.data		= &sysctl_dccp_tx_qlen, | 
					
						
							|  |  |  | 		.maxlen		= sizeof(sysctl_dccp_tx_qlen), | 
					
						
							|  |  |  | 		.mode		= 0644, | 
					
						
							| 
									
										
										
										
											2009-01-16 23:36:32 +00:00
										 |  |  | 		.proc_handler	= proc_dointvec_minmax, | 
					
						
							|  |  |  | 		.extra1		= &zero, | 
					
						
							| 
									
										
										
										
											2006-11-20 19:19:32 -02:00
										 |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2007-09-26 11:31:49 -03:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		.procname	= "sync_ratelimit", | 
					
						
							|  |  |  | 		.data		= &sysctl_dccp_sync_ratelimit, | 
					
						
							|  |  |  | 		.maxlen		= sizeof(sysctl_dccp_sync_ratelimit), | 
					
						
							|  |  |  | 		.mode		= 0644, | 
					
						
							|  |  |  | 		.proc_handler	= proc_dointvec_ms_jiffies, | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2006-11-20 19:19:32 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-05 13:32:03 -08:00
										 |  |  | 	{ } | 
					
						
							| 
									
										
										
										
											2006-03-20 19:25:02 -08:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct ctl_table_header *dccp_table_header; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int __init dccp_sysctl_init(void) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2012-04-19 13:44:49 +00:00
										 |  |  | 	dccp_table_header = register_net_sysctl(&init_net, "net/dccp/default", | 
					
						
							| 
									
										
										
										
											2008-01-09 00:30:05 -08:00
										 |  |  | 			dccp_default_table); | 
					
						
							| 
									
										
										
										
											2006-03-20 19:25:02 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return dccp_table_header != NULL ? 0 : -ENOMEM; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void dccp_sysctl_exit(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (dccp_table_header != NULL) { | 
					
						
							| 
									
										
										
										
											2012-04-19 13:24:33 +00:00
										 |  |  | 		unregister_net_sysctl_table(dccp_table_header); | 
					
						
							| 
									
										
										
										
											2006-03-20 19:25:02 -08:00
										 |  |  | 		dccp_table_header = NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |