13e5048495c8569bfdd552750e0315973c61e7c93Andy Grover/*
23e5048495c8569bfdd552750e0315973c61e7c93Andy Grover * Copyright (c) 2006 Oracle.  All rights reserved.
33e5048495c8569bfdd552750e0315973c61e7c93Andy Grover *
43e5048495c8569bfdd552750e0315973c61e7c93Andy Grover * This software is available to you under a choice of one of two
53e5048495c8569bfdd552750e0315973c61e7c93Andy Grover * licenses.  You may choose to be licensed under the terms of the GNU
63e5048495c8569bfdd552750e0315973c61e7c93Andy Grover * General Public License (GPL) Version 2, available from the file
73e5048495c8569bfdd552750e0315973c61e7c93Andy Grover * COPYING in the main directory of this source tree, or the
83e5048495c8569bfdd552750e0315973c61e7c93Andy Grover * OpenIB.org BSD license below:
93e5048495c8569bfdd552750e0315973c61e7c93Andy Grover *
103e5048495c8569bfdd552750e0315973c61e7c93Andy Grover *     Redistribution and use in source and binary forms, with or
113e5048495c8569bfdd552750e0315973c61e7c93Andy Grover *     without modification, are permitted provided that the following
123e5048495c8569bfdd552750e0315973c61e7c93Andy Grover *     conditions are met:
133e5048495c8569bfdd552750e0315973c61e7c93Andy Grover *
143e5048495c8569bfdd552750e0315973c61e7c93Andy Grover *      - Redistributions of source code must retain the above
153e5048495c8569bfdd552750e0315973c61e7c93Andy Grover *        copyright notice, this list of conditions and the following
163e5048495c8569bfdd552750e0315973c61e7c93Andy Grover *        disclaimer.
173e5048495c8569bfdd552750e0315973c61e7c93Andy Grover *
183e5048495c8569bfdd552750e0315973c61e7c93Andy Grover *      - Redistributions in binary form must reproduce the above
193e5048495c8569bfdd552750e0315973c61e7c93Andy Grover *        copyright notice, this list of conditions and the following
203e5048495c8569bfdd552750e0315973c61e7c93Andy Grover *        disclaimer in the documentation and/or other materials
213e5048495c8569bfdd552750e0315973c61e7c93Andy Grover *        provided with the distribution.
223e5048495c8569bfdd552750e0315973c61e7c93Andy Grover *
233e5048495c8569bfdd552750e0315973c61e7c93Andy Grover * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
243e5048495c8569bfdd552750e0315973c61e7c93Andy Grover * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
253e5048495c8569bfdd552750e0315973c61e7c93Andy Grover * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
263e5048495c8569bfdd552750e0315973c61e7c93Andy Grover * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
273e5048495c8569bfdd552750e0315973c61e7c93Andy Grover * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
283e5048495c8569bfdd552750e0315973c61e7c93Andy Grover * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
293e5048495c8569bfdd552750e0315973c61e7c93Andy Grover * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
303e5048495c8569bfdd552750e0315973c61e7c93Andy Grover * SOFTWARE.
313e5048495c8569bfdd552750e0315973c61e7c93Andy Grover *
323e5048495c8569bfdd552750e0315973c61e7c93Andy Grover */
333e5048495c8569bfdd552750e0315973c61e7c93Andy Grover#include <linux/kernel.h>
343e5048495c8569bfdd552750e0315973c61e7c93Andy Grover#include <linux/sysctl.h>
353e5048495c8569bfdd552750e0315973c61e7c93Andy Grover#include <linux/proc_fs.h>
363e5048495c8569bfdd552750e0315973c61e7c93Andy Grover
373e5048495c8569bfdd552750e0315973c61e7c93Andy Grover#include "rds.h"
383e5048495c8569bfdd552750e0315973c61e7c93Andy Grover
393e5048495c8569bfdd552750e0315973c61e7c93Andy Groverstatic struct ctl_table_header *rds_sysctl_reg_table;
403e5048495c8569bfdd552750e0315973c61e7c93Andy Grover
413e5048495c8569bfdd552750e0315973c61e7c93Andy Groverstatic unsigned long rds_sysctl_reconnect_min = 1;
423e5048495c8569bfdd552750e0315973c61e7c93Andy Groverstatic unsigned long rds_sysctl_reconnect_max = ~0UL;
433e5048495c8569bfdd552750e0315973c61e7c93Andy Grover
443e5048495c8569bfdd552750e0315973c61e7c93Andy Groverunsigned long rds_sysctl_reconnect_min_jiffies;
453e5048495c8569bfdd552750e0315973c61e7c93Andy Groverunsigned long rds_sysctl_reconnect_max_jiffies = HZ;
463e5048495c8569bfdd552750e0315973c61e7c93Andy Grover
473e5048495c8569bfdd552750e0315973c61e7c93Andy Groverunsigned int  rds_sysctl_max_unacked_packets = 8;
483e5048495c8569bfdd552750e0315973c61e7c93Andy Groverunsigned int  rds_sysctl_max_unacked_bytes = (16 << 20);
493e5048495c8569bfdd552750e0315973c61e7c93Andy Grover
503e5048495c8569bfdd552750e0315973c61e7c93Andy Groverunsigned int rds_sysctl_ping_enable = 1;
513e5048495c8569bfdd552750e0315973c61e7c93Andy Grover
52fe2c6338fd2c6f383c4d4164262f35c8f3708e1fJoe Perchesstatic struct ctl_table rds_sysctl_rds_table[] = {
533e5048495c8569bfdd552750e0315973c61e7c93Andy Grover	{
543e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.procname       = "reconnect_min_delay_ms",
553e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.data		= &rds_sysctl_reconnect_min_jiffies,
563e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.maxlen         = sizeof(unsigned long),
573e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.mode           = 0644,
586d4561110a3e9fa742aeec6717248a491dfb1878Eric W. Biederman		.proc_handler   = proc_doulongvec_ms_jiffies_minmax,
593e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.extra1		= &rds_sysctl_reconnect_min,
603e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.extra2		= &rds_sysctl_reconnect_max_jiffies,
613e5048495c8569bfdd552750e0315973c61e7c93Andy Grover	},
623e5048495c8569bfdd552750e0315973c61e7c93Andy Grover	{
633e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.procname       = "reconnect_max_delay_ms",
643e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.data		= &rds_sysctl_reconnect_max_jiffies,
653e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.maxlen         = sizeof(unsigned long),
663e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.mode           = 0644,
676d4561110a3e9fa742aeec6717248a491dfb1878Eric W. Biederman		.proc_handler   = proc_doulongvec_ms_jiffies_minmax,
683e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.extra1		= &rds_sysctl_reconnect_min_jiffies,
693e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.extra2		= &rds_sysctl_reconnect_max,
703e5048495c8569bfdd552750e0315973c61e7c93Andy Grover	},
713e5048495c8569bfdd552750e0315973c61e7c93Andy Grover	{
723e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.procname	= "max_unacked_packets",
733e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.data		= &rds_sysctl_max_unacked_packets,
743e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.maxlen         = sizeof(unsigned long),
753e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.mode           = 0644,
766d4561110a3e9fa742aeec6717248a491dfb1878Eric W. Biederman		.proc_handler   = proc_dointvec,
773e5048495c8569bfdd552750e0315973c61e7c93Andy Grover	},
783e5048495c8569bfdd552750e0315973c61e7c93Andy Grover	{
793e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.procname	= "max_unacked_bytes",
803e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.data		= &rds_sysctl_max_unacked_bytes,
813e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.maxlen         = sizeof(unsigned long),
823e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.mode           = 0644,
836d4561110a3e9fa742aeec6717248a491dfb1878Eric W. Biederman		.proc_handler   = proc_dointvec,
843e5048495c8569bfdd552750e0315973c61e7c93Andy Grover	},
853e5048495c8569bfdd552750e0315973c61e7c93Andy Grover	{
863e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.procname	= "ping_enable",
873e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.data		= &rds_sysctl_ping_enable,
883e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.maxlen         = sizeof(int),
893e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		.mode           = 0644,
906d4561110a3e9fa742aeec6717248a491dfb1878Eric W. Biederman		.proc_handler   = proc_dointvec,
913e5048495c8569bfdd552750e0315973c61e7c93Andy Grover	},
92f8572d8f2a2ba75408b97dc24ef47c83671795d7Eric W. Biederman	{ }
933e5048495c8569bfdd552750e0315973c61e7c93Andy Grover};
943e5048495c8569bfdd552750e0315973c61e7c93Andy Grover
953e5048495c8569bfdd552750e0315973c61e7c93Andy Grovervoid rds_sysctl_exit(void)
963e5048495c8569bfdd552750e0315973c61e7c93Andy Grover{
97be7faf7168e831f17b85a96f2f797f504b66cfd7wangweidong	unregister_net_sysctl_table(rds_sysctl_reg_table);
983e5048495c8569bfdd552750e0315973c61e7c93Andy Grover}
993e5048495c8569bfdd552750e0315973c61e7c93Andy Grover
100ef87b7ea39a91906218a262686bcb8bad8b6b46eZach Brownint rds_sysctl_init(void)
1013e5048495c8569bfdd552750e0315973c61e7c93Andy Grover{
1023e5048495c8569bfdd552750e0315973c61e7c93Andy Grover	rds_sysctl_reconnect_min = msecs_to_jiffies(1);
1033e5048495c8569bfdd552750e0315973c61e7c93Andy Grover	rds_sysctl_reconnect_min_jiffies = rds_sysctl_reconnect_min;
1043e5048495c8569bfdd552750e0315973c61e7c93Andy Grover
105ec8f23ce0f4005b74013d4d122e0d540397a93c9Eric W. Biederman	rds_sysctl_reg_table = register_net_sysctl(&init_net,"net/rds", rds_sysctl_rds_table);
1068690bfa17aea4c42da1bcf90a7af93d161eca624Andy Grover	if (!rds_sysctl_reg_table)
1073e5048495c8569bfdd552750e0315973c61e7c93Andy Grover		return -ENOMEM;
1083e5048495c8569bfdd552750e0315973c61e7c93Andy Grover	return 0;
1093e5048495c8569bfdd552750e0315973c61e7c93Andy Grover}
110