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